私は主にターミネーターを使用していますが、通常は3つのターミナルウィンドウで開きます。さまざまな理由でGnome端末も使用しています。history
を実行するときに以前に発行されたコマンドを見逃すことがあるため、この場合、bash履歴はどのように処理されるのでしょうか。
たとえば、私のプロンプトには現在のbash履歴行(\!
)が表示され、3つの端末ウィンドウを分割してTerminatorを起動すると、すべての端末で同じ履歴行(たとえば100)が表示されます。どの履歴が保存されますか?
また、ターミネーターを使用した後にGnomeターミナルを起動すると、ターミネーターで以前に発行されたすべてのコマンドに関係なく、起動時に行100が表示されます
保存されるbashセッションは、最後に閉じられた端末のセッションです。すべてのセッションのコマンドを保存したい場合は、 here で説明したトリックを使用できます。
export Prompt_COMMAND='history -a'
マンページを引用するには:「設定されている場合、値は各プライマリプロンプトを発行する前にコマンドとして実行されます。」
そのため、コマンドが終了するたびに、プロンプト($ PS1のみ)を再度表示する前に、未書き込みの履歴項目を
~/.bash_history
に追加します。そのため、その行を
/etc/bash.bashrc
に入れた後、自分の端末に怠けていたからといって、車輪を再発明したり、貴重な時間を再入力したりする必要はありません。
とにかく、異なるセッションからのコマンドが履歴ファイルに混在することを考慮する必要があるため、後で読むのはそれほど簡単ではありません。
こちらもご覧ください:
man bash
を複数回読み取った後、シェルごとに個別の履歴ファイルを使用します。 mkdir -m 0700 ~/.history
を実行してから追加しました
[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$(date +%y%b%d-%H%M%S).$$
# close any old history file by zeroing HISTFILESIZE
HISTFILESIZE=0
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096
HISTSIZE=4096
私の~/.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
(最初の引数、たとえばSudo mount
をソートチェーンに含めるため)。
すべての端末からhistory
を表示するには:
export Prompt_COMMAND='history -a; history -r'
を.bashrcファイルに追加します。
ソース: http://northernmost.org/blog/flush-bash_history-after-each-command
別の方法については、「 永続的な履歴をbashに保持する 」も参照してください。これは、any端末に入力されたすべてのコマンドを「永続履歴」ファイルに送信するようにプロンプトを設定します(通常の.history
)。