複数のターミナル間で bash のヒストリを共有する方法

Guake とか Terminator とか iTerm とか Console2 とかでタブを開きまくっていると、あっちのタブで入力したコマンドがこっちのタブにはヒストリとして出てこない!ムキーっってなりますね。特に超絶かっこいいワンライナーを書いた時にそれを再利用するためにどのタブで打ったか探しまわったりしている時には、ハイテクなんだかローテクなんだかよくわからなくて惨めな気持ちになりますね。

だいぶ前に、この問題の解決を試みようとしたときはなぜか全然うまく行かなくて挫折した記憶があるのですが、今日改めてぐぐってみたら一発で解決しました。

$ export PROMPT_COMMAND='history -a; history -r'

これだけです。
これを ~/.bashrc の片隅にでも忍ばせておくだけで幸せになれること請け合いです。


以下、ちょっと解説。

まず、bash の組込み変数(シェル変数)である PROMPT_COMMAND に値を設定しておくと、bash はプロンプトを表示する直前に毎回そのコマンドを実行してくれるようです。

そこに history -a と history -r を実行するように指定しています。

history -a はそのセッションで直前に実行したコマンドをヒストリ保存ファイルに追加するためのコマンドです。
history -r はヒストリ保存ファイルに保存されている内容をロードするためのコマンドです。

ですので、あるセッションで打ったコマンドがリアルタイムにすべてのセッションのヒストリに反映されるわけではありませんが、大抵の場合は意識せずともコマンド履歴がマージされながら更新されていくことになるので問題ないでしょう。

入門bash 第3版

入門bash 第3版


bashクックブック

bashクックブック