2011-06-25 9 views

答えて

44

あなたは通常、デフォルトで設定されているignorebothHISTCONTROL環境変数を()に設定した場合、先頭にスペース文字でコマンドをする(履歴に保存されることはありません重複と同様)。例えば

HISTCONTROL

コマンドが履歴リストに保存されている方法を制御する値をコロンで区切ったリスト:ここで

$ HISTCONTROL=ignoreboth 
$ echo test1 
$ echo test2 
$ history | tail -n2 
1015 echo test1 
1016 history | tail -n2 

man bashが言うことです。値のリストにignorespaceが含まれている場合、空白文字で始まる行は履歴リストに保存されません。値がignoredupsの場合、以前の履歴エントリと一致する行は保存されません。 ignorebothの値は、ignorespaceignoredupsの略です。 erasedupsという値を指定すると、現在の行と一致するすべての前の行が、その行が保存される前に履歴リストから削除されます。上記のリストにない値は無視されます。 HISTCONTROLが設定されていないか、有効な値が含まれていない場合、シェルパーサーが読み取ったすべての行は、HISTIGNOREの値に従って履歴リストに保存されます。複数行複合コマンドの2行目以降の行はテストされず、HISTCONTROLの値に関係なく履歴に追加されます。

も参照してください:UNIX SEでUNIX SEで

6

あなたは、2つのいずれかを行うことができます。

export HISTFILE=/dev/null 

または、スペースでコマンドを開始します。

+4

これまでにスペースがありました –

+4

スペースの先頭にあるコマンドを自動無視するのは本当に悪い考えですので、デフォルトでは 'ignorespace'が設定されていないと思います。 – Sorpigal

+0

このように 'HISTFILE'を設定すると、*履歴を保存することができなくなり、コマンドがメモリ内履歴に追加されることを防ぎません。 – chepner

17

さらに良い用途HISTIGNORE。これにより、無視するパターンのセットを指定できます(rmなど)。 /dev/null

+0

ああ、忘れてしまいました。 –

+0

これは正しい答えです。+1 – najjarammar

36

.bashrc/.bash_profile /には、export HISTIGNORE=' *'と入力してください。次に、1つのスペースで無視するコマンドを開始します。シェルの起動時

+3

これは、環境変数 'HISTCONTROL'の値に依存しますが、' ignorespace'が設定されているとは限りません。 – Sorpigal

+2

'HISTCONTROL'に' ignorespace'が含まれている場合、実際に 'HISTIGNORE'に' * 'を含めるだけです。 2つは独立して動作します。 – chepner

1

それとも

unset HISTFILE 

(輸出HISTFILE =を/ dev/null前の回答に似てのみ短いです)そこにいたくはありません。例えば、私は(ちょうど私が私のinitファイルに次のコードを入れて、単一のArrow-Up + Enter :)

で、一晩処理した結果の完全なディレクトリを削除した後(作品を、それのトラウマを歴史の中で任意のrm -rfしたくありません.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 
+0

これはオンディスクの履歴にのみ影響し、メモリ内の履歴には影響しません。 – chepner

1

、私は明示的にクリーンアップその私のエントリからの歴史:

$ ls # goes in history 
$ ls # does not 
関連する問題