web-dev-qa-db-ja.com

複数の端末でのBash履歴処理

私は主にターミネーターを使用していますが、通常は3つのターミナルウィンドウで開きます。さまざまな理由でGnome端末も使用しています。
historyを実行するときに以前に発行されたコマンドを見逃すことがあるため、この場合、bash履歴はどのように処理されるのでしょうか。

たとえば、私のプロンプトには現在のbash履歴行(\!)が表示され、3つの端末ウィンドウを分割してTerminatorを起動すると、すべての端末で同じ履歴行(たとえば100)が表示されます。どの履歴が保存されますか?

また、ターミネーターを使用した後にGnomeターミナルを起動すると、ターミネーターで以前に発行されたすべてのコマンドに関係なく、起動時に行100が表示されます

109
zetah

保存されるbashセッションは、最後に閉じられた端末のセッションです。すべてのセッションのコマンドを保存したい場合は、 here で説明したトリックを使用できます。

export Prompt_COMMAND='history -a'

マンページを引用するには:「設定されている場合、値は各プライマリプロンプトを発行する前にコマンドとして実行されます。」

そのため、コマンドが終了するたびに、プロンプト($ PS1のみ)を再度表示する前に、未書き込みの履歴項目を~/.bash_historyに追加します。

そのため、その行を/etc/bash.bashrcに入れた後、自分の端末に怠けていたからといって、車輪を再発明したり、貴重な時間を再入力したりする必要はありません。

とにかく、異なるセッションからのコマンドが履歴ファイルに混在することを考慮する必要があるため、後で読むのはそれほど簡単ではありません。

こちらもご覧ください:

104
jcollado

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をソートチェーンに含めるため)。

31
waltinator

すべての端末からhistoryを表示するには:

export Prompt_COMMAND='history -a; history -r'を.bashrcファイルに追加します。

ソース: http://northernmost.org/blog/flush-bash_history-after-each-command


7
Elijah Lynn

別の方法については、「 永続的な履歴をbashに保持する 」も参照してください。これは、any端末に入力されたすべてのコマンドを「永続履歴」ファイルに送信するようにプロンプ​​トを設定します(通常の.history)。

6
Eli Bendersky