コマンドがBash履歴に表示されないようにするにはどうすればよいですか?


93

時々、のようなコマンドを実行したときにrm -rf XYZ、誤って同じコマンドをで再度実行する可能性があるため、これをBash履歴に記録したくない場合がありますreverse-i-search。これを防ぐための良い方法はありますか?



一方でbash あり(それゆえプログラミング)シェルスクリプトを書くために使用することが、この特定のそれの側面は、(歴史対話方式唯一のものです)プログラミングとは全く関係ありません。閉じる投票。
paxdiablo

回答:


110

あなたが設定した場合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

以下も参照してください。


51

.bashrc / .bash_profile /のどこにでも、を置きexport HISTIGNORE=' *'ます。次に、無視するコマンドを1つのスペースで開始します。

$ ls  # goes in history
$  ls # does not

4
これは、HISTCONTROL必ずしもignorespace設定されていない環境変数の値に依存します。
sorpigal

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

22

さらに使いやすいHISTIGNORE。これにより、無視するパターンのセットを指定できます(などrm)。すべての履歴をにパイプするよりも(私が思うに)優れてい/dev/nullます。


ああ、そのことを忘れてしまった:)
Corey Henderson

13
kill -9 $$

私はそれが前の答えほど良くないことを知っていますが、これは何も保存せずに現在のBashシェルを強制終了します、HISTCONTROLがデフォルトで設定されていない、設定するのを忘れた、または先行スペースを置くのを忘れた純粋で単純な場合に役立ちますいくつかのパスワードを入力しただけで、それらを永久に履歴に残したくない場合。

これは手っ取り早い方法です。履歴保存シェルの外で行う必要があるため、履歴ファイルの消去などはあまり良くありません(別のユーザーとしてログインし、su / sudoを使用する、バックグラウンドジョブを作成するなど)。


8

次の2つのいずれかを実行できます。

export HISTFILE=/dev/null

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


5
素晴らしいですその前にスペース
エリック・フォルティス

8
一部の人は、スペースが前に付いたコマンドを自動無視することは非常に悪い考えであり、したがってignorespaceデフォルトでは設定されていないと考えています。
sorpigal

3
HISTFILEこの方法で設定すると履歴の保存が防止され、コマンドがメモリ内の履歴に追加されることは防止されません。
chepner 2013

3

または

unset HISTFILE

(前の回答と同様に、より短いだけ:export HISTFILE = / dev / null)


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

2

シェルの起動時に、履歴を残したくないエントリから明示的にクリーンアップします。たとえば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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.