複数端末によるBashの履歴処理
私は主にターミネーターを使用しており、通常3つの分割されたターミナルウィンドウで開いています。また、様々な理由からGnomeターミナルも使用しています。
この場合、bashの履歴はどのように処理されるのでしょうか。
例えば、私のプロンプトには現在のbashの履歴行(`!
)が表示されていますが、ターミナルウィンドウを3つに分割してターミネーターを起動すると、すべてのターミナルで同じ履歴行(仮に100とする)が表示されます。どの履歴が保存されるのでしょうか?
また、Terminatorを使用した後にGnome Terminalを起動すると、Terminatorで以前に発行されたすべてのコマンドに関係なく、起動時に100行目が表示されます。
110
3
保存されるbashセッションは、最も遅く閉じた端末のものです。もし、セッションごとにコマンドを保存したい場合は、こちらで説明したトリックを使うとよいでしょう。
この行を
/etc/bash.bashrc
に入れたら、端末の扱いが悪いからといって、車輪を再発明したり、貴重な数秒を再入力する必要がなくなりました。ただし、履歴ファイルには異なるセッションのコマンドが混在するため、後で読むのが面倒になることを考慮する必要があります。
こちらもご覧ください。
man bash
を何度も読み返した結果、私はシェルごとに別々の履歴ファイルを使用しています。mkdir -m 0700 ~/.history
とやって、その中にを私の
~/.bashrc
に追加しました。時々、du -sk .history
を実行して、それを掃除するのを忘れないようにします。このように、自分が入力したすべてのコマンドを保存しておくのはいいことです。最近、自分が何をしていたかを確認するために、上記を使用したところです。
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
. またはcut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
とする。 (第 1 引数、例えばsudo mount
をソートチェーンに含めるため)。すべての端末から
history
を表示する。.bashrc ファイルに
export PROMPT_COMMAND='history -a; history -r'
を追加してください。出典http://northernmost.org/blog/flush-bash_history-after-each-command