bashで端末セッションのコマンド履歴を同期する方法は?


13

~/.bash_historyターミナルセッション中に最近のコマンドを検索しようとしましたが、それらはそこにありませんでした。これは、複数のターミナルセッションを開いているためだと思います。

現在のターミナルセッションのコマンド履歴をbash_historyファイルに同期(つまり、sync-pushまたはsync-write-out)できる方法はありますか(セッションを閉じてその環境を失うことなく)。

sync一部のシステムでコマンドがファイルシステムの変更を保存する方法とは、リモートでの考え方が似ています。)

複数のセッション履歴を保持するためにbashを設定できると思いますが、現在の履歴バッファをプッシュする機能は、新しいマシンで作業していて、思い通りにbashを設定するのを誤って忘れた場合に役立ちます。


history -a シェルの組み込みコマンドを試しましたが、どういうわけか、.bash_historyファイルに対して「許可が拒否されました」と表示されるようになりました。
n611x007

質問が重複しています。参照:unix.stackexchange.com/questions/1288/...
エドゥアルドLeggiero

回答:


19

次の行を追加し.bashrcます。

export PROMPT_COMMAND="history -a; history -n"

新しいターミナルを開いて確認します。

説明

  • history -a 履歴ファイルに新しい履歴行を追加します。
  • history -nbash履歴ファイルから読み込まれていない行をセッションの現在の履歴リストに読み込むように指示します。
  • PROMPT_COMMAND:この変数の内容は、bashshow promptの前に通常のコマンドとして実行されます。そのため、コマンドを実行するたびにhistory -a; history -n実行され、bash履歴が同期されます。

ありがとう!なぜ以前に許可が拒否されたのかわかりませんが、新しい端末では期待通りに動作するようです!通常history -a、変更されていないbashrcを備えた端末でも使用できるはずです。
n611x007

これのパフォーマンスへの影響をいつ心配する必要がありますか?(私はローエンドデバイスについて考えています。これがどれほど大きなオーバーヘッドをもたらすかはわかりません。)
n611x007

1
また、あなたはすでにそれを使用することをお勧めします。この場合には、プロンプトのコマンドがあるかもしれないexport PROMPT_COMMAND="${PROMPT_COMMAND};history -a; history -n"
ファビアン

${PROMPT_COMMAND}空の場合、先頭にあるためエラーが発生します;
ボリスデッペン

@BorisDäppenは右であるが、これは簡単に解消されるexport PROMPT_COMMAND="${PROMPT_COMMAND}${PROMPT_COMMAND:+;}history -a; history -n"
TML
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.