履歴を保存せずに端末を閉じるにはどうすればよいですか?


33

誤って多くのコマンドを実行し、bash履歴を汚染したことが何度もありました。bash履歴を保存せずに端末を閉じるにはどうすればよいですか?私はFedoraを使用しています。

回答:


25

シェルの履歴は、HISTFILE変数によって示されるファイルに保存されます。そう:

unset HISTFILE

これはzshにも適用されますが$HISTFILE、シェルの開始時に示されるファイルに保存し続けるkshには適用されません(逆に、シェルを開始したら履歴をkshに保存することにします)。


履歴を汚染した後、ログアウトする前にこれを使用できますか?そして、このセッションのためのその錆?set HISTFILE次回ログインする必要はありませんか?(これが正しいか間違っている場合だけ言う)

@ acidzombie24それは正しいです。環境変数への変更は、たとえばrcファイルに明示的に変更を保存しない限り、セッション間で保存されません。
jw013

31

短い答え:

プロンプトでこれを入力します。

$ kill -9 $$

これにより、シェルはシグナルをトラップする、履歴を保存する、実行する、停止したジョブについて警告するなど、何もできずにすぐにシェルを強制終了します~/.bash_logout

長い答え:

注:これらのオプションは相互に排他的ではありません。それらはすべて一度に使用できます。

オプション1:

履歴ファイルを整理することに関して完璧主義者である場合、できることは、HISTIGNORE記録したくないコマンドのグロブを含めるように変数を変更することです。たとえば、追加する場合HISTIGNORE='ls*:cd*'、あなたに~/.bashrc、その後の任意のインスタンスをlsし、cdあなたの履歴ファイルに挿入されていません。

オプション2:

どのコマンドが履歴から除外されるかをコマンドごとに制御する場合は、設定できます HISTCONTROL='ignorespace'は、スペースで始まるコマンド行を省略するコマンドを。を使用ignorebothすると、繰り返される行も省略されます。次に、コマンドを入力する前にスペースバーを押すと、履歴ファイルに表示されなくなります。

オプション3:

ターミナルを閉じたときにシェルがすぐに終了するようにしたい場合はtrap、ターミナルプログラムがシェルに送信するシグナル(xtermたとえば、送信SIGHUPしてシェルが終了するのを待つ)と、履歴を保存せずに終了することができますこの信号を受信します。これを追加してください~/.bashrc

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
「kill -9 $$」メソッドの場合は+1。これはHISTIGNOREなどが読み取り専用に設定されている状況を回避する1つの方法です。
コーリーヘンダーソン

7
私は、kill -9他のすべてが失敗したような悲惨な状況を除いて、何かを使用することを促進することは良い考えだとは思いません。
クリストファーハンマルストロム

1
SIGKILLを送信することは、標準的な操作手順として決して良い考えではありません。HISTFILEの設定解除など、適切な手順を使用します。
アルケージュ

@Arcege TMTOWTDI。
アンフェタマシン

私は反対のことを知りたかった-悲しいかな、bashを殺して彼の歴史を確実に保存する方法-これは私の質問に答えた、ありがとう。
mveroone

3

history -c直前に誰も提案していないのを見て驚いていますexit。IINM(私は専門家ではありません)それはうまくいくでしょう。


2
あなたは正しい軌道に乗っています:history -r履歴ファイルを再読み込みするので、保存は何もしません。
サイモンリヒター

履歴をフラッシュするのは悪い習慣です...シェルの履歴には、誰が何をしたかに関する多くの有用な情報が含まれています。あなたのプラットフォームを初めて使用する人にとって非常に便利です(ドキュメント、変更管理に100%自信がある場合を除く)
フランクリンピアト

2

bashが履歴ファイルを決定するために使用する2つの環境変数と、シェルの終了時にファイルに書き込む行数があります。

次のいずれかを使用して、セッションの履歴を破棄できます(履歴ファイルから省略したいセッション中に設定します)。

HISTFILE=/dev/null

または

HISTSIZE=0

これらのいずれも、Fedora上のBashで正常に機能します。


1

なぜコマンド履歴をそんなに気にするのかわかりません。特定のコマンドが頻繁に必要な場合は、それらのエイリアスを定義すると、履歴で検索するのではなく、2回のキーストロークでそれらを取得できるので、もっと楽しくなるかもしれません。


0
  1. イーライはすでにあなたにBashの正しい答えを与えていましたHISTSIZE=0

  2. GNU screen用にメソッドを追加するだけです。Ctrl+A(画面エスケープシーケンス)を押してからを押します:scrollback 0。これにより、スクロールバック履歴が削除されます。これで、すぐに:scrollback 15000スクロールバックバッファサイズをリセットできます。


OPはいつ使用していると言ったのscreen(1)ですか?
amphetamachine

彼はしませんでした。ただし、画面セッション内でBashを実行することもできますが、HISTSIZE = 0では画面のスクロールバックバッファーにアクティビティの詳細が残ります。したがって、本当にきれいにしたい場合はscrollback=0、同様に行う必要があります。
gsbabil

ウィンドウが閉じると(つまり、シェルが終了すると)、スクロールバックバッファーはクリアされます。Ctrl-a Hと入力した場合はどうですか?ログファイルを強制終了しますか?
amphetamachine

@amphetamachine:いいえ、現在のウィンドウのロギングのみを開始/終了します。Neighther Ctrl+a HCtrl+a :clearの歴史を削除します。あなたが必要Ctrl+a :scrollback 0です。自分でテストできます。フレッシュスクリーンセッションを開始します。今すぐcat /etc/passwd。次に、上記のいずれかを実行します- Ctrl+a HまたはCtrl+a :clear。ここで、donig aにCtrl+a [続いて上矢印キーを押してスクリーンバッファからコピーしてみて、上に移動してコピーできる範囲を確認します。にCtrl+a :scrollback続いてを実行した場合clear、スクロールバックバッファはないため、現在のウィンドウで表示できる範囲までしか移動できません。
gsbabil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.