履歴を保存せずに端末を閉じる方法は?

履歴を保存せずに端末を閉じる方法は?

1回以上誤っていくつかのコマンドを実行してbashの履歴を汚染しました。 bashの履歴を保存せずに端末を閉じる方法は?私はFedoraを使用しています。

答え1

これを達成する方法はいくつかあります。

注:このオプションはいいえ相互に排他的であり、任意の組み合わせで同時に使用できます。

オプション0

HISTFILEシェル変数を削除します。

unset HISTFILE

HISTFILEマニュアルページによれば、設定を解除した後に設定されているかどうかに関係なく、ファイルに自動的に記録を記録するシェルの機能が削除されます。

オプション1

厄介な履歴ファイルを扱うときに完璧主義者であれば、記録したくないHISTIGNOREコマンドセットを含むように変数を変更するだけです。たとえば、thenHISTIGNORE='ls*:cd*'~/.bashrcthenのインスタンスを追加すると、履歴ファイルに挿入されませんlscd

この変数はextglob開くと次のようになります。

shopt -s extglob
# With `extglob` on I can use extended globs to ignore all:
# cd ..
# cd ../
# cd ..//
# cd ../..
# cd ../../
# cd ../..//
# etc.
HISTIGNORE='cd +(..|../)*(/)'

cd ..などcd ../は無視しますcd ../..が、そのまま維持されますcd myfolder

glob 拡張の詳細については、以下で確認できます。バッシュのマニュアルページ

オプション2

コマンドごとに履歴から削除されるコマンドを制御するには、スペースHISTCONTROL='ignorespace'で始まるコマンドラインを省略するコマンドを設定できます。を使用すると、重複したignoreboth行も省略されます。その後、コマンドを入力する前にスペースバーを押すと、そのコマンドは履歴ファイルに表示されません。

# With HISTCONTROL=ignorespace (or =ignoreboth) this line gets written to history
$ mycommand
# But this line does not
$  mycommand

オプション3

ターミナルを閉じた直後にシェルを終了したい場合は、trapターミナルプログラムがシェルにシグナルを送信し(xtermシグナルを送信してSIGHUPからシェルが終了するのを待つ)、記録を保存せずにシャットダウンすることができます。この信号が受信されました。次の項目に追加してください~/.bashrc

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

オプション4

一部の人はこれを「野蛮な」アプローチと考えるかもしれませんが、SIGKILLPIDをシェルに送信するとシェルはすぐに終了し、シェルはこれを実行できません。何もない信号のキャプチャ、記録の保存、実行、停止~/.bash_logoutしたタスクに関する警告、またはその他の良い内容のようなものです。

$$コマンドを実行するシェルプロセスのPIDに拡張)

kill -9 $$

答え2

シェルの履歴は、この変数が表すファイルに保存されますHISTFILE。だから:

unset HISTFILE

これはzshでも機能しますが、kshでは機能しません。 kshは、シェルの起動時に指示されたファイルに保存し続けます$HISTFILE(逆にシェルを起動すると、履歴をkshに保存することになります)。

答え3

history -c私は以前誰もこれを提案しなかったことに驚きましたexit。 IINM(私は専門家ではありません)が素晴らしい仕事をします。

答え4

命令記録になぜそれほど興味を持っているのか分かりません。特定のコマンドが頻繁に必要な場合は、そのコマンドのエイリアスを定義すると、履歴を参照する必要なく2つのキーストロークでそのコマンドを検索できるため、より面白いことがあります。

関連情報