私の中には次のものがあります~/.bashrc
HISTCONTROL=ignoreboth:erasedups
しかし、私の記録には重複項目がたくさん含まれています。たとえば、5つの項目がありますsudo apt-get upgrade
。
私はRaspbian
Jessie
主にを通じて実行してアクセスしていますssh
。
PSこの記事を書いて、私はちょうど入力しましたが、sudo apt-get upgrade
項目は1つだけです。理由をご存知ですか?どうやって予防できますか?
答え1
どちらも無視したのでクリアする必要はありません。
Ignoreboth は冗長コマンドと空のコマンドを処理します。
両方を無視するか、重複項目を削除してみてください。
"HISTCONTROL=ignoreboth"
これを使用してbashをリロードします。ありがとうございます。
答え2
それぞれの新しいコマンドを一意に記録するのは難しいです。まず、次のものを追加するか、類似する必要があります
~/.profile
。
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
次に、以下を追加する必要があります~/.bash_logout
。
history -a
history -w
答え3
持つ二つコマンドリスト:
- 記憶の中に。
- ファイルから。
HISTControl の設定はメモリのリストに従って動作します。オプションなしでコマンドでリストを表示できます history
。コマンドを入力するとリストに追加されます。追加するコマンドがリストの最後のコマンドと同じで、ignoredups
このオプションが設定されている場合、またはerasedups
このオプションが設定されている場合、コマンドは削除されます。この場合、両方のオプションにはいくつかの類似点があります。このオプションを設定する
と、erasedups
このコマンドより前のすべてのエントリがメモリリストから削除されます(ただしファイルからは削除されません)。この削除はただ新しい重複コマンドが発生しました。つまり、新しいコマンドがリストに追加されるまで、冗長コマンドは保持されます。
ファイルにメモリのリストを書き込むには、次のコマンドを使用できますhistory -w
(ファイル全体を新しいコピーに置き換えます)。ファイルのリストは記録されるまで更新されません。または、追加history -a
(以前に追加されなかった新しい行のみが追加され、ファイルに以前の重複コマンドが残ることがあります)。このオプションは、bashが終了したときにhistappend
ファイルを置き換えるか追加することを選択します。追加すると、冗長コマンドが変更されないことがあります。
ファイルリストを整理する1つの方法(コマンドの最後のエントリを保持)は次のとおりです。
$ history | sort -urk2 | sort -n | sed 's/^ \+[0-9]\+ \+//' >~/.bash_history
history -w
各コマンドをファイルに追加する1つの方法は、プロンプトコマンドbash変数を使用して各新しいコマンドラインで実行することです。
$ PROMPT_COMMAND='history -w'
~/.bashrc
自動的に実行するには、次のコマンドをすべて(通常はLinuxで)または~/.profile
(通常はMacで)追加する必要があります。
HISTFILE=${HISTFILE:-~/.bash_history}
HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -w'
nl "$HISTFILE"|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2- >"${HISTFILE}.temp" && mv "$HISTFILE"{.temp,}
history -c; history -r