メモリから現在のセッション履歴を読み取る方法(ログアウト時に最終的に「.bash_history」に書き込まれる履歴)

メモリから現在のセッション履歴を読み取る方法(ログアウト時に最終的に「.bash_history」に書き込まれる履歴)

私はこの問題に何度もぶつかりました。現在アクティブなセッションの履歴にアクセスする必要があります。より簡単な方法がない場合は、ターゲットセッションでそれを読み取るCプログラムを作成します。

bashセッションのセッション履歴がメモリに保存される場所を知っている人はいますか? 環境変数または/procのどこかに保存されていますか?私はこれをどこでも検索し、私が見つけることができる最も近い答えは「どこか覚えて」でした。当然、誰かがコマンドを実行するたびにセッション履歴を記録するようにシステムを設定できますが、これは私の特定の用途には実用的ではありません。 (他のアクティブセッションが実行されたときにコマンドを「history -a」できる場合はこれで十分です)。

誰かがこの情報を見つけることができる場所、またはこの情報を含む開始メモリアドレス(与えられたセッション/ TTYへ)を見つけることができる場所への建設的なヒントやポインタがある場合。

これは、現在の履歴セッションをメモリに保存する方法、またはすぐに保存するようにbashを設定する方法を尋ねる一般的な履歴質問の繰り返しではないことに注意してください(インターネットとこのフォーラムにはすでにこれらの質問がいっぱいです)。

これは、ルート(または他のユーザー)としてログインしている他のセッションの現在の「メモリ履歴」を取得する方法を尋ねます。

ご協力ありがとうございました、

ジェフ

答え1

history -a FILE履歴を保存最後の実行以降history -a内容をメモリ履歴にFILEロードします。デフォルト設定としてシェルで試してみましょう。history -r FILEFILE

$ PS1='parent\$ ' bash --noprofile --norc

それでは、使用したいカスタム履歴ファイルとデフォルトのBash履歴ファイルを消去しましょう。

parent$ > history.txt
parent$ > ~/.bash_history

それでは始めましょうその他保存およびロード履歴を示すサブシェル:

parent$ PS1='child\$ ' bash --noprofile --norc

次に、次のコマンドを実行します。

child$ echo foo
foo

特定のファイルに履歴を保存します。

child$ history -a history.txt

基本ファイルに履歴を追加します。

child$ cat history.txt >> ~/.bash_history

シェルを終了します。

child$ exit
exit

カスタム履歴ファイルに予想される内容が含まれていることを確認してください。

parent$ cat history.txt
echo foo
history -a history.txt

Bash履歴ファイルに予想される内容が含まれていることを確認してください。

parent$ cat ~/.bash_history
echo foo
history -a history.txt
cat history.txt >> ~/.bash_history
exit

関連情報