履歴ファイルをbashで統合できますか?


35

screenLinuxデスクトップとサーバーで定期的に複数のセッションを実行しています。

これに関する問題はgrep、コマンド履歴を調べてみると、別のセッションでコマンドを発行したことがわかり、その履歴項目を取得するために切り離して再接続する必要があることです。

異なるように更新された履歴を複数のセッションからすべて「中央の履歴」に「強制」することは可能ですか?


同様の問題が発生したため、ターミナルセッション間の履歴を表示できませんでした。〜/ .bash_historyファイルはrootが所有しており、書き込み可能ではありませんでした。所有者/グループをユーザーに変更すると問題が修正されました:sudo chown <user>:<group>〜/ .bash_history
mateo

回答:


41

必要なことが2つあります。

  1. にコマンドshopt -s histappendを挿入します.bashrc。これにより、履歴ファイルが上書きされるのではなく、履歴ファイルに追加されます。
  2. また、で、bashがプロンプトを表示するたびに.bashrc、挿入PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"と履歴ファイルが再書き込みおよび再読み取りされます。

編集:history -nトリックのためのe-t172に感謝


6
これをありがとう。PROMPT_COMMAND = "$ PROMPT_COMMAND; history -a; history -n"を使用してさらに改善しました。このように、他のセッションで発行されたコマンドは現在のセッションの履歴にすぐに表示されます(履歴を更新するには、最初にEnterキーを押す必要があります)。
エティエンヌデシャンプス

8
PROMPT_COMMAND以前は定義していなかっPROMPT_COMMAND="history -a; history -n"たため、エラーを回避するために使用する必要がありました。
ウィリアムジャクソン

1
正しい履歴-a、-c、および-rコマンドについては、superuser.com / a / 734410/250287の回答を参照してください。
mtd 14

新人への警告:しばらくの間、履歴の書き換えを使用した後、私はしばしば間違ったコマンドを発行していることに気付きました。前の行にあるコマンドを見ると、上矢印がそれを繰り返すと予想されますが、この構成では常にそうなるとは限りません。
ティアゴ

11

使用しないでくださいhistory -a; history -n。期待どおりに機能せず、履歴内に重複した、順序が乱れたコマンドが多数残されます。一般的に期待どおりに機能するソリューションは次のとおりです。

# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"

セミコロンの代わりに改行を使用することも、PROMPT_COMMANDでのセミコロンの欠落/重複の問題に対処する簡単な方法です。


履歴-a、-c、その後、-r正しいです...これは受け入れ答えなければなりませんが
MTD

1
export必要はありません。インタラクティブシェルオプションは~/.bashrc、すべてのサブシェルから呼び出される設定対象となるため、継承は必要ありません。
ドルメン

PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"代わりに使用しない理由はありますか?
6

多くのプロンプトコマンドはそれを使用または表示するため、この順序では履歴コマンドを実行する前に最後の終了値を保存する必要があります。
アダムクレーン

-1

PROMPT_COMMANDは、一部のディストリビューションではデフォルトで定義されていません。たとえば、Archで定義されていますが、Debianでは定義されていません。

ディストリビューションホッピング中に使用するDropboxにbashrcがあります。

PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"

基本的なシェルプログラミングの問題に対するひどい解決策。正しい方法:PROMPT_COMMAND="$PROMPT_COMMAND; history -a; history -n"
ドルメン

良い:PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''history -a; history -n'
ドルメン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.