1回以上誤っていくつかのコマンドを実行してbashの履歴を汚染しました。 bashの履歴を保存せずに端末を閉じる方法は?私はFedoraを使用しています。
答え1
これを達成する方法はいくつかあります。
注:このオプションはいいえ相互に排他的であり、任意の組み合わせで同時に使用できます。
オプション0
HISTFILE
シェル変数を削除します。
unset HISTFILE
HISTFILE
マニュアルページによれば、設定を解除した後に設定されているかどうかに関係なく、ファイルに自動的に記録を記録するシェルの機能が削除されます。
オプション1
厄介な履歴ファイルを扱うときに完璧主義者であれば、記録したくないHISTIGNORE
コマンドセットを含むように変数を変更するだけです。たとえば、thenHISTIGNORE='ls*:cd*'
に~/.bashrc
thenのインスタンスを追加すると、履歴ファイルに挿入されませんls
。cd
この変数は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
一部の人はこれを「野蛮な」アプローチと考えるかもしれませんが、SIGKILL
PIDをシェルに送信するとシェルはすぐに終了し、シェルはこれを実行できません。何もない信号のキャプチャ、記録の保存、実行、停止~/.bash_logout
したタスクに関する警告、またはその他の良い内容のようなものです。
($$
コマンドを実行するシェルプロセスのPIDに拡張)
kill -9 $$
答え2
シェルの履歴は、この変数が表すファイルに保存されますHISTFILE
。だから:
unset HISTFILE
これはzshでも機能しますが、kshでは機能しません。 kshは、シェルの起動時に指示されたファイルに保存し続けます$HISTFILE
(逆にシェルを起動すると、履歴をkshに保存することになります)。
答え3
history -c
私は以前誰もこれを提案しなかったことに驚きましたexit
。 IINM(私は専門家ではありません)が素晴らしい仕事をします。
答え4
命令記録になぜそれほど興味を持っているのか分かりません。特定のコマンドが頻繁に必要な場合は、そのコマンドのエイリアスを定義すると、履歴を参照する必要なく2つのキーストロークでそのコマンドを検索できるため、より面白いことがあります。