web-dev-qa-db-ja.com

コマンドを履歴に残さない

私はbashを使用しており、一部のコマンドが履歴に保持されないようにしたいと思います。

  • 次のコマンドだけでそれを行うことは可能ですか?
  • セッション全体でそれを行うことは可能ですか?
35
Luc M

そして私は別の答えを思い出しました、これはあなたの質問に対する実際の答えです。

hISTCONTROLに "ignorespace"がある場合、bashはスペース文字で始まる行を記憶しません。現在のシェルの履歴にも表示されず、$ HISTFILEに保存されます。

例えば〜/ .bashrcにexport HISTCONTROL = 'ignoreboth:erasedups'があります

bashのmanページの詳細は次のとおりです。

 HISTCONTROL 
コマンドを履歴リストに保存する方法を制御する値のコロン区切りリスト
。値のリストに
 ignorespaceが含まれている場合、スペース文字で始まる行は履歴リストに保存されません
。 ignoreupsの値により、前の履歴エントリに一致する行
が保存されなくなります。 
 ignorebothの値は、ignorespaceおよびignoredupsの省略形です。 erasedupsの値
は、現在の行
に一致する以前のすべての行を履歴リストから削除してから、その行を保存します。
上記のリストにない値はすべて無視されます。 HISTCONTROLが設定されていない場合、または有効な値が含まれていない場合、
シェルパーサーによって読み取られたすべての行が履歴リストに保存され、HISTIGNOREの値
に従います。複数行
複合コマンドの2行目以降はテストされず、HISTCONTROL。
の値に関係なく履歴に追加されます
。
37
cas

ここに私がグーグルから学んだいくつかの歴史の教訓があります:

特定の文字列を無視するように履歴を設定できます。この例では、コマンドls、passwd、および文字スペースが前に付いているコマンドはすべて無視しています。

エクスポートHISTIGNORE = "ls:passwd:"

セッションの履歴を無効にするには、次のコマンドを発行できます。

エクスポートHISTSIZE = 0

参考

19
Michael Havas

履歴から最後のコマンドを削除したいだけの場合は、 Up-arrow、 に続く Ctrl - U (行の先頭まで消去)、次に Up-arrow 再び。

このように、履歴から個々の行を削除できます。上矢印または検索などを使用して、編集中の現在のコマンドラインにしてから、 Ctrl - U、 その後 Up-arrow または Down-arrow 別の履歴行に移動します。

私は1年前に偶然これを発見しました。文書化されているかどうかはわかりません。

ただし、一般的には、現在のシェルの履歴をまったく保存しないほうが簡単です。

HISTFILE=/dev/null
7
cas

HISTFILE変数の設定を解除できます。 man bashから:

 HISTFILE 
コマンド履歴が保存されるファイルの名前(以下のHIS-
 TORYを参照)。デフォルト値は〜/ .bash_historyです。設定されていない場合、
対話型シェル
の終了時にコマンド履歴は保存されません。

これにより、シェルが終了する前にローカルシェルの履歴にコマンドが表示されるのを防ぐことはできないと思います。

3
Greg Hewgill

私は時々します

export HISTFILE=/dev/null
2
Rory

誰もこのメソッドを書いていないので、私は書いていきます。

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -dは、言及されたエントリを履歴から削除します。

HISTCMDには、次に実行するコマンドのcommand_numberが格納されます。したがって、(HISTCMD-1)は最後に実行されたコマンドを指します。

私はそれがどのように機能するかを示す短いbashムービーを作りました: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

コマンドを実行した後、コマンド自体も削除されるため、矢印を上に移動してもコマンドは表示されません。そのため、頻繁に使用する場合は、エイリアスを作成することをお勧めします。

alias hc='history -d $((HISTCMD-1)) && history -d $1'

その後、次のことができます。

$ hc command
1
Itai Ganot