回答:
履歴に保存せずにコマンドを実行する場合は、余分なスペースを追加してください
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
これが機能するために、あなたはどちらか必要ignorespace
かignoreboth
でHISTCONTROL
。たとえば、実行
HISTCONTROL=ignorespace
この設定を永続的にするには、に設定します.bashrc
。
既にコマンドを実行しており、履歴から削除する場合は、最初に使用します
history
履歴内のコマンドのリストを表示します。削除する番号(例:1234)の隣の番号を見つけて実行します
history -d 1234
さらに、削除したい行がすでに$ HISTFILEに書き込まれている場合(通常、デフォルトでセッションを終了するときに発生します)、$ HISTFILEに書き戻す必要があります。セッション:
history -w
history -a
に設定します。その場合、通常の構成での終了時ではなく、すでに履歴ファイルに書き込まれています。具体的には:mywiki.wooledge.org/BashFAQ/088
history -w
。それ以外の場合、終了しても、削除された行は残っています!
history -w
after を使用することhistory -d {num}
はまさに私が必要とするものでした-その重要なtidbitを答えに追加する必要があります。
history -w
は、すでに.bash_history
ファイルに書き込まれているエントリに必要です。再現方法(例:標準構成のCentOS 7):1.ログイン2.コマンドの入力echo foo
3.ログアウト4.再度ログイン5.エントリを削除echo foo
6.ログアウト7.再度ログイン:エントリはまだあります。bash履歴の設定方法によっては、他の方法でこの問題を再現できる可能性があります。つまり、ログアウトする前に履歴の書き込みを引き起こす場合です。
私は自分でこれを持っている~/.bashrc
コマンドが作るこれ、$ forget
履歴から前のコマンドを削除します
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
もっとシンプルになりませんか?
history | tail -n1
ですhistory
ので、その番号を削除するコマンド自体が、間違ったエントリを取得します。ただし、history -d $( history | awk 'END{print $1-1}' )
行選択、フィールド選択、および減算を組み合わせます。
bashセッション全体を忘れたい場合はkill
、現在のbashプロセスを実行できます。変数は現在のシェルのを$$
保持するためpid
、次のことができます。
kill -9 $$
履歴をクリアした後、変更を書き込む必要があります。また、履歴に履歴ワイプコマンドを使用したくない場合は、次のようなコマンドを実行する必要があります。
history -c && history -w && logout
幸運を。
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done