時々、のようなコマンドを実行したときにrm -rf XYZ、誤って同じコマンドをで再度実行する可能性があるため、これをBash履歴に記録したくない場合がありますreverse-i-search。これを防ぐための良い方法はありますか?
bash あり(それゆえプログラミング)シェルスクリプトを書くために使用することが、この特定のそれの側面は、(歴史対話方式唯一のものです)プログラミングとは全く関係ありません。閉じる投票。
時々、のようなコマンドを実行したときにrm -rf XYZ、誤って同じコマンドをで再度実行する可能性があるため、これをBash履歴に記録したくない場合がありますreverse-i-search。これを防ぐための良い方法はありますか?
bash あり(それゆえプログラミング)シェルスクリプトを書くために使用することが、この特定のそれの側面は、(歴史対話方式唯一のものです)プログラミングとは全く関係ありません。閉じる投票。
回答:
あなたが設定した場合HISTCONTROLには、環境変数をignoreboth(通常はデフォルトで設定されている)、先頭の空白文字を持つコマンドは(重複としても)履歴に保存されません。
例えば:
$ HISTCONTROL=ignoreboth
$ echo test1
$ echo test2
$ history | tail -n2
1015 echo test1
1016 history | tail -n2
これがman bash言うことです:
ヒストコントロール
履歴リストにコマンドを保存する方法を制御する、コロンで区切られた値のリスト。値のリストが含まれている場合は
ignorespace、空白文字で始まる行は履歴リストに保存されません。の値を指定ignoredupsすると、前の履歴エントリに一致する行が保存されなくなります。の値ignorebothは、ignorespaceおよびの省略形ですignoredups。値を指定erasedupsすると、現在の行に一致する以前のすべての行が、その行が保存される前に履歴リストから削除されます。上記のリストにない値は無視されます。HISTCONTROLが設定されていない場合、または有効な値が含まれていない場合は、シェルパーサーによって読み取られたすべての行が履歴リストに保存されます。HISTIGNORE。複数行の複合コマンドの2行目以降はテストされず、の値に関係なく履歴に追加されますHISTCONTROL。
以下も参照してください。
.bashrc / .bash_profile /のどこにでも、を置きexport HISTIGNORE=' *'ます。次に、無視するコマンドを1つのスペースで開始します。
$ ls # goes in history
$ ls # does not
HISTCONTROL必ずしもignorespace設定されていない環境変数の値に依存します。
HISTCONTROLが含まれている場合ignorespace、実際にはに `*`を含めるだけで冗長HISTIGNOREです。2つは独立して動作します。
さらに使いやすいHISTIGNORE。これにより、無視するパターンのセットを指定できます(などrm)。すべての履歴をにパイプするよりも(私が思うに)優れてい/dev/nullます。
次の2つのいずれかを実行できます。
export HISTFILE=/dev/null
または、スペースでコマンドを開始します。
ignorespaceデフォルトでは設定されていないと考えています。
HISTFILEこの方法で設定すると、履歴の保存が防止され、コマンドがメモリ内の履歴に追加されることは防止されません。
または
unset HISTFILE
(前の回答と同様に、より短いだけ:export HISTFILE = / dev / null)
シェルの起動時に、履歴を残したくないエントリから明示的にクリーンアップします。たとえばrm -rf、履歴には何も入れたくありません(1つのArrow-Up+ Enter:だけで一晩処理された結果でいっぱいのディレクトリを削除した後のトラウマです)。
私は私のinitファイルに次のスニペットを入れました(で動作しますが.zshrc、でも動作するはずです.bashrc)
# ...
HISTFILE=~/.zshhistory
# ...
# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE