複数のKonsoleでbash履歴の保存が正しく機能しません。

複数のKonsoleでbash履歴の保存が正しく機能しません。

複数の Konsole 端末を使用します。各端末に入力したすべてのコマンドをコマンド履歴に保存し、次に開くコンソールにそのコマンドがすべて含まれるようにしたいと思います。各端末が他の端末のコマンド履歴を上書きするのを防ぐために、私のファイルには次の設定があります。.bashrc

# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"  
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1

プロンプトでコマンド番号を確認するための最後の行を入力しました。注文番号。 600を超えることはありませんが、以前のコマンドのいくつかはまだ履歴から消えています。繰り返し提供されるコマンドが多数ありますが、期待どおりにignoredupsno コマンドをプロンプトに追加しません。しかし、古いコマンドはまだ消えています。歴史的に、命令の数は500を少し超えるレベルに維持されていました。

ファイルは無視されましたが、.bash_historyまだ多数の重複ファイルが含まれています。

$HISTSIZEPS:echoの出力とその$HISTFILESIZE両方です。=1000


更新:上記の項目で問題が検出されました.bashrc。 .bash_historyに最後の新しいコマンドを追加history -aするには、呼び出します。PROMPT_COMMANDしたがって、効果はignoredupsありerasedupsません。

すべての端末で繰り返さずに.bash_historyに書き込む方法はありますか?各コマンドプロンプトに完全な履歴をロードし、書き込みhistory -r保存を再利用したくありませんhistory -w。これは、ある端末で実行されたコマンドが並列に実行される別の端末にも表示されるためです。結合されたコマンドが新しい端末にのみ表示されます。

私の履歴が500に切り捨てられた理由の謎が解けました。私はこのコンピュータにSSHを接続するたびにこれが起こることを知りました。.bash_profile次の項目で項目を作成すると、問題が解決しました。

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

sshをするたびに、私の.bashrcも実行されます。これで、履歴ファイルのサイズが単調に増加します。

答え1

私は新しいコマンドを直接追加し、重複したコマンドを削除することは不可能であるという結論に達しました。だから私の解決策は後で次のコマンドを実行することでした。または私のcrontabに入れてください。

tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp 
mv $HOME/.hist_Temp $HOME/.bash_history

上記のコマンドは、コマンドの最後のエントリを保持し、順序を混在させることなく、履歴ファイルからその上の他のすべての重複エントリを削除します。

答え2

見苦しくてsed良いawkかもしれませんが、以下を追加して同じ問題を解決しようとしました.bashrc

export HISTFILE=.bash_history_`tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))'`

これにより、開きたい端末ごとに別々の履歴ファイルが生成されますが、bash内でbashを実行すると同じ履歴が使用されますが、上書きしないでください。私の経験に基づいて警告します。この方法は効果があり、レコードを上書きするのを防ぎますが、grep探しているレコードを見つけるには複数のファイルを使用する必要があります。これは時々非常に時間がかかることがあります。

関連情報