回答:
単一のコマンドを履歴に保存しないようにするには、その前にスペースを付けて␣
ください(ここでマークされています):
$ echo test
test
$ history | tail -n2
3431 echo test
3432 history | tail -n2
$ ␣echo test2
test2
$ history | tail -n2
3431 echo test
3432 history | tail -n2
この動作は、~/.bashrc
ファイル、つまり次の行で設定されます。
HISTCONTROL=ignoreboth
man bash
言う:
HISTCONTROL
コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト。値のリストが含まれている場合 ignorespaceを、 空白文字で始まる行は履歴リストに保存されません。ignoreupsの値により 、前の履歴エントリに一致する行は保存されません。ignorebothの値は 、ignorespaceおよびignoreupsの省略形です。
ignoredups
ちなみにhistory | tail -n2
、上記のテストで履歴に一度しか表示されないのはそのためです。
端末の履歴はRAMに保存され~/.bash_history
、端末を閉じるとすぐにフラッシュされます。特定のエントリを削除したい場合は、次の方法で削除~/.bash_history
できますsed
。
# print every line…
sed '/^exit$/!d' .bash_history # … which is just “exit”
sed '/^history/!d' .bash_history # … beginning with “history”
sed '/>>log$/!d' .bash_history # … ending with “>>log”
sed '\_/path/_!d' .bash_history # … containing “/path/” anywhere
最後に、私は、デフォルトの区切り文字を変更/
する_
ことで、これはに等しく、それは検索語の内部で使われていますようsed -i '/\/path\//d' .bash_history
。コマンドが削除する行のみを出力する場合、-i
オプションを追加し、削除を実行するように変更!d
しd
ます。
# delete every line…
sed -i '/^exit$/d' .bash_history # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history # … ending with “>>log”
sed -i '\_/path/_d' .bash_history # … containing “/path/” anywhere
1つの方法は、HISTIGNORE
環境変数を設定することです。からman bash
HISTIGNORE
A colon-separated list of patterns used to decide which command
lines should be saved on the history list. Each pattern is
anchored at the beginning of the line and must match the com‐
plete line (no implicit `*' is appended). Each pattern is
tested against the line after the checks specified by HISTCON‐
TROL are applied.
[FWIW、これは、HISTCONTROL
前面にスペースを入力する回避策を提供するデフォルトです]。
だから、例えば
HISTIGNORE='history -d*'
永続的にしたい場合は、 ~/.bashrc
export HISTIGNORE='history -d*'
私は通常使用します:
history -w; history -c; $EDITOR $HISTFILE; history -r
履歴ファイルはディスクに書き込まれ、メモリでクリアされ、編集して目的の操作を行い、編集した履歴ファイルが再び読み込まれます。
編集者がバックアップファイルを保存する場合、いたずらな言葉がディスク上に表示される可能性があることに注意してください。
-d
を使用する別のオプションは、予測履歴番号を使用することです。
startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239 # bad thing
17240 history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239 # good thing
17240 # other thing
17241 history | tail -n 3
この例では、悪いものを削除し、履歴番号を取得するコマンドを削除してから、履歴の削除に使用したコマンドを削除します。その後、すべてが消毒されます。