Bashでターミナルセッションコマンド履歴を同期するには?

Bashでターミナルセッションコマンド履歴を同期するには?

最近のコマンドを端末セッションで検索しようとしていますが、~/.bash_historyそのコマンドはありません。複数の端末セッションが開かれているようです。

現在のターミナルセッションのコマンド履歴をbash_historyファイルに同期(同期プッシュや同期書き込みなど)する方法はありますか(セッションを閉じたり環境を失うことなく)?

sync(このコマンドがいくつかのシステムでファイルシステムの変更を保存する方法とアイデアは非常に似ています。)

複数のセッション履歴を保持するためにbashを設定できると仮定していますが、現在の履歴バッファをプッシュする機能は、新しいコンピュータで作業していて、誤って望む方法でbash設定を忘れたときにまだ便利です。

答え1

次の行を追加してください.bashrc

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

新しい端末を開いて確認してください。

説明する

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

答え2

端末、特に新しい端末間で履歴を共有できるという点が気に入っていますが。 1つのウィンドウは通常、他のウィンドウとは別に特定のタスクを実行するため、すべてのコマンドを共有したくありません。シェルが終了または要求されたときにマージします。

私は長い間bashレコード(タイムスタンプを含む)をマージする方法を探していましたが、受け入れ可能な項目が見つからないようです...

最後に、私はディスクの「.bash_history」とメモリのシェル「history」をマージするスクリプトをDIYにしました。タイムスタンプの順序とそのタイムスタンプ内のコマンドの順序は保持されます。

今、それを得るとき(必要に応じて別名または関数にすることができます)、別名「hc」を使用します。現在のシェルセッションはディスクとメモリの間でマージされるため、必要に応じて(または「.bash_logout」を介してシェルからログアウトすると)、他の以前のマージで履歴が更新されます。

定義されたPerl REに基づいて一意のコマンド(複数行を含む)を削除するか、単純で敏感なコマンドを削除(消去)するかを選択できます。合わせて調整してください!

これが結果です...https://antofthy.gitlab.io/software/history_merge.bash.txt

楽しんでください。

関連情報