複数の画面ウィンドウで自分の履歴を簡単に検索できますか?

複数の画面ウィンドウで自分の履歴を簡単に検索できますか?

現在のscreenセッションには12個のウィンドウが開いています。数週間実行しています... ImageMagickconvertコマンドを実行したことがわかります。一つhistory | grep convert先週、いつかこの12の画面ウィンドウの1つ... 12の画面をすべて閉じたり実行したりせずに、12のすべてのインスタンスのBash履歴を簡単に取得する方法はありますか?

答え1

history -a; history -cすべてのウィンドウで実行して履歴を保存できます。その後、history -r更新してください。

この問題をより恒久的に解決するには、以下を追加してください.bashrc

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

答え2

tcshを使用すると、定期的なエイリアスを使用してセッション間で履歴を共有できます。

.cshrc(または.tcshrc)ファイルから:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

これにより、60分ごとに記録コマンドが自動的に実行されます。これにより、ホームディレクトリの公開履歴ファイルに履歴が保存されます。履歴をより頻繁に更新するには、t期間の数を減らすか、「定期的な」コマンドを実行して手動で更新できます。

答え3

難しいと思います。以下はあなたに役立ついくつかの方法です。

プロセス統計ツールがインストールされていて(Linuxでは名前付きパッケージの検索acct)、それを使用する権限がある場合は、次のようにどの端末でいつ実行できるかを確認できますconvert

lastcomm convert

これが利用できないかわからない場合は、history各bashインスタンスでコマンドを実行して見つけることができますconvert。また、bash開始履歴ファイルでもコマンドを探します。

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)画面ウィンドウの数を繰り返します。現在のbashを実行していないウィンドウはスキップし、入力を異なる方法で解釈する他のプロセスもスキップしてください。
  • screen -p $w stuff …指定されたウィンドウへの入力として、次の文字列を送信します。文字列の末尾に改行文字を追加する必要があります。
  • ウィンドウ3で実行されている場合、ファイルには/tmp/convert.history同様の行のリストが含まれます。3 convert foo.jpgconvert foo.jpg

答え4

Bashは終了時にのみ記録を作成するため、せいぜい問題が発生します。 zshがアクティブセッション間で履歴を共有できると聞きました。

関連情報