特定のシェルでbash_historyを一時的に中断しますか?


115

ある種の「シークレットモード」に入るために、bashで履歴追跡を一時的に停止する方法はありますか?記録された機密情報が必要ないものを端末に入力しています。

回答:


153

これはあなたが探しているものでなければなりません:

unset HISTFILE

から man bash

HISTFILEが設定されていない場合、または履歴ファイルが書き込み可能でない場合、履歴は保存されません。

あるいは、オフに切り替えてから再びオンにしたい場合は、使用する方が簡単かもしれませんset

消す

set +o history

オンにする

set -o history

12
値はHISTFILEbashの終了時にのみチェックされるため、最初の方法はそのままでは機能しません(値を復元すると、コマンドは保存されます)。set +o history指示どおりに動作します。
ジル

5
ありがとう、素晴らしい。私は秘密のものを使用set +o historyset -o historyているときに使用して前後に切り替えます;)
Naftuliケイ

1
unset HISTFILE動作しません。 set -/+o history魅力のように機能します!感謝
kholofelo Maloma

4
ヒントとして、コマンドの前にスペースを入れた場合(スペースでコマンドを開始した場合)、履歴には記録されず、上下矢印キーも表示されません。
マフディ

1
これはzsh btwでは機能しません
Shubham Chaudhary

33

bashを使用HISTCONTROL="ignorespace"して、履歴に記録したくないコマンドを設定し、スペースを前に置きます。対策を忘れた場合history -d <number>、特定のエントリを削除したりhistory -c、コマンド履歴全体をクリアしたりすることもできます。


27

にがHISTCONTROL含まれていることを確認してくださいignorespace。おそらくHISTCONTROL=ignorespaceHISTCONTROL=ignoredups:ignorespaceまたは何か)をに追加したいと思うでしょう~/.bashrc。その後、スペースで始まるコマンドラインは履歴から省略されます。

別の可能性は、履歴を保存しない新しいbashセッションを開始することです。

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

複数のコマンドを保存する必要がなく、上矢印を使用して前のコマンドにアクセスする場合は、次を使用します。

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

コマンドの保存方法を制御するには、4つの方法(レベル)があります。

  1. 最初の最も簡単な方法は、使用ignorespace(またはignoreboth)です。

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    これにより、コマンドの前にスペースを使用して、のメモリリストに記録されないようにすることができますhistory。また、結果として、ファイルに送信できるコマンドがメモリに記録されていないため、1つのコマンドがにリストされているファイルに送信されることも回避され$HISFILEます。

  2. 次のファイルにコマンドを記録しないでください$HISTFILE

    $ unset HISTFILE

    設定しない場合、コマンド履歴はシェルの終了時に保存されません。

    ヌルHISTFILE=''および/またはに設定するHISTFILE=/dev/nullと、同じ効果が得られます。コマンドがまだメモリリストに記録されていることを理解し、コマンドhistoryまたは上矢印を試してください。

    警告:シェルが存在する前にHISTFILEがリセットされた場合、メモリに記録されたものはすべてファイルに書き込まれます。

  3. メモリ内の履歴リストに新しいコマンドを記録しないでください。また、メモリにないため、ファイルに記録できません。

    $ shopt -ou history              # or set +o history

    shopt -os history(またはset -o history)で再度有効にします

  4. メモリ内の履歴リストからすべてのコマンドを削除します。

    $ HISTSIZE=0

    すべてのコマンドは(メモリから)消去されるため、変数が再び有効な数値に設定されるまで、ファイルには何も保存できません。


//、これは1つの便利なページで@Ambroseからの回答を除くすべての回答をカバーします。行く方法、@ Isaac。このドキュメントにリンクを1つまたは2つ追加してもよろしいですか?man history私たちの大部分にとっては、これを削減するつもりはないことは確かです。
ネイサンバサニーズ

1
@NathanBasaneseが拡大しました。いい?
アイザック

// 、 はい!これらがBash変数Shoptビルトインドキュメントから来ていると仮定するのは正しいでしょうか?
ネイサンバサニーズ

//、また、Bash Variablesのドキュメントを読んでいるHISTIGNOREときにsubsumes、の機能に遭遇しましたHISTCONTROL
ネイサンバサニーズ

(Linuxを使用している場合):コマンドを実行するとどうなりますかLESS=+'/^ *HISTI' man bash(「マニュアルページ」ではありませんか?)。@NathanBasanese
アイザック

3

履歴をオフにする簡単な方法が1つあるため、コマンドは.bash_historyファイルに保存されません。

コマンドが履歴に保存されないように、コマンドの前に空白またはタブスペースを配置する必要があります。例えば:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

このpwdコマンドは、前に空白があるため、履歴に保存されません。


これは動作しません; Bashは、「-」または「-history」、またはその他のハイフンでつながれたコマンドが見つからないと文句を言います。
サミュエルA.ファルボII

2
HISTCONTROL =「ignorespaceは」forcefsckがの応答のように設定されていない限りこの文句を言わない仕事
DeveloperChris

1
export HISTFILE=/dev/null 

それが私の後藤です。設定されていないHISTORY / HISTFILE / HISTCONTROLなどが機能しない場合に備えて、/ dev / nullにエクスポートすることは常に機能します。


一時的に履歴を一時停止するには?これは通常のコマンドとしては機能しませんでした。後続のコマンドが履歴に記録されました。これを.bash_profileまたはスクリプトで呼び出していますか?GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
マットゲッセル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.