多くの画面ウィンドウで履歴を簡単に検索できますか?


11

私の現在のscreenセッションには、12の開いているウィンドウがあります。数週間実行されています...先週、これらの12画面のウィンドウの1つで ImageMagick convertコマンドを実行しました... 12インスタンスすべてのBash履歴を閉じたり実行したりせずに簡単に検索できますか?全12画面で?history | grep convert


1
私はZshのを使用して、私が持っているsetopt share_history中で/etc/zsh/zshrc、この問題は私に起こることはありませんので:P
phunehehe

回答:


18

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

それをより永続的に解決するには、これをあなたに追加してください.bashrc

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

2
ありがとうございます。唯一の問題は、あるシェルで何かを入力してから別のシェルに移動してすぐに履歴を入力すると、履歴に表示されないことです。これは、PROMPT_COMMANDがまだ実行されていないため、更新が発生していないためです。最初に2番目のウィンドウでReturnキーを押すか、別のコマンドを実行してから、historyと入力する必要があります。
Javid Jamae

1

難しいですね。ここにあなたのために働くかもしれないいくつかの方法があります。

プロセスアカウンティングツールがインストールされていて(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

1
残念ながら、これらは機能しませんでした。:-( history | grep convertすべてのウィンドウで実行されてしまいました。失望
Josh

1

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

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

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

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


0

Bashは終了時に履歴のみを書き込むため、せいぜいこれが問題になります。zshはアクティブなセッション間で履歴を共有できると聞きました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.