質問
私は私のものを書いています PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
しかし、私はまださまざまなターミナルセッションからいくつかの複製を取得しています。私はまだいくつかの複製を取得するようですが、コマンドの使用が少なくなります PROMPT_COMMAND="history -w;$PROMPT_COMMAND"
.
私はできることを知っています history -a;history -c; history -r
しかし、私はそれらすべてを同期させたくありません。私は歴史-nと呼ぶときにそれが起こることを望んでいます。私は基本的に、歴史-Aまたは歴史-Wのいずれかを使用することにしていますが、2つの違いを見つけることができないようです。どちらができるだけ多くの複製を避ける必要がある方が良いでしょう。
解決
あなたは2つの質問を述べました:
違いは何ですか
history -a
とhistory -w
?
history -a
意思 追加 履歴ファイルのコンテンツに対する現在のセッション履歴。
history -w
意思 交換 現在のセッション履歴を含む履歴ファイルのコンテンツ。
どちらがより多くの複製を避けますか?
理論的にはどちらでもありません。ない -a
または -w
重複をチェックします。特に -w
履歴ファイルのコンテンツを置き換えるため、さらに複製を回避します。ファイル内の潜在的な複製エントリは、ファイル内の他のものとともに削除されます。
の詳細を読んでください history
指図 バッシュマニュアルで。
重複を殺す他の可能性に関するいくつかの情報:
特別なバッシュ変数 HISTCONTROL=ignoredups
ここではあまり役に立ちません。なぜなら、それはランニングシェルに入力されているときに重複を排除するからです。現在の歴史や履歴ファイルの既存の複製を防ぐことはできません。さらに ignoredups
以前のコマンドの複製であるコマンドを無視するだけでなく、歴史の以前のコマンドの複製である場合ではありません。
残念ながら、あまり有望でさえありません HISTCONTROL=erasedups
ここで大いに役立ちます。 erasedups
現在入力されているコマンドに一致する履歴エントリを消去します。悲しいことに、それは現在のセッション履歴でのみそうしています。履歴ファイルで複製を検索しません。また、使用するときに複製がセッション履歴に入ることを妨げません history -n
.
の詳細を読んでください 特別な変数 HISTCONTROL
バッシュマニュアルで。
他のヒント
これを使用して複製を避けることができます
export HISTCONTROL=ignoredups
詳細については、これをご覧ください。
BASH変数を使用します PROMPT_COMMAND
と history
そして使用します sort
と uniq
コマンド:
$> export PROMPT_COMMAND="history -a && history -c && sort ~/.bash_history | uniq > ~/.bash_history_new && rm ~/.bash_history && mv ~/.bash_history_new ~/.bash_history && history -r"
これにより、設定する必要はありません shopt -s histappend
そして、やります export HISTCONTROL=erasedups
.
これにより、歴史と歴史のファイルがフライで複製せずにファイルを保持します。順調なコマンドが入力された状態でプレイできます(ヒント:履歴で行数を使用し、特定の行の開始位置から並べ替え、重複を削除した後、ライン番号で再びソートします)。