履歴から単一の行を削除する方法は?


回答:


339

予防策

履歴に保存せずにコマンドを実行する場合は、余分なスペースを追加してください

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

これが機能するために、あなたはどちらか必要ignorespaceignorebothHISTCONTROL。たとえば、実行

HISTCONTROL=ignorespace

この設定を永続的にするには、に設定します.bashrc

事後クリーンアップ

既にコマンドを実行しており、履歴から削除する場合は、最初に使用します

history

履歴内のコマンドのリストを表示します。削除する番号(例:1234)の隣の番号を見つけて実行します

history -d 1234

さらに、削除したい行がすでに$ HISTFILEに書き込まれている場合(通常、デフォルトでセッションを終了するときに発生します)、$ HISTFILEに書き戻す必要があります。セッション:

history -w

動いた。私は...私たちはそれを修正した後、〜/ .bashrcのを調達する必要があると思う
B七

3
@ jw013 PROMPT_COMMANDをhistory -aに設定します。その場合、通常の構成での終了時ではなく、すでに履歴ファイルに書き込まれています。具体的には:mywiki.wooledge.org/BashFAQ/088
jordanm

5
1行を削除した後、を使用して現在の履歴を$ HISTFILEに書き出す必要がありますhistory -w。それ以外の場合、終了しても、削除された行は残っています!
フェリペアルバレス

1
上記のコメントに+1。history -wafter を使用することhistory -d {num}はまさに私が必要とするものでした-その重要なtidbitを答えに追加する必要があります。
マイケル

1
@BobStein history -wは、すでに.bash_historyファイルに書き込まれているエントリに必要です。再現方法(例:標準構成のCentOS 7):1.ログイン2.コマンドの入力echo foo3.ログアウト4.再度ログイン5.エントリを削除echo foo6.ログアウト7.再度ログイン:エントリはまだあります。bash履歴の設定方法によっては、他の方法でこの問題を再現できる可能性があります。つまり、ログアウトする前に履歴の書き込みを引き起こす場合です。
maxschlepzig

53
  1. すべての履歴を消去するには、次を使用します

    history -c
  2. 単一の行を削除するには、使用します

    history -d linenumber

6

私は自分でこれを持っている~/.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 " " )もっとシンプルになりませんか?
seumasmac

1
history | tail -n1ですhistoryので、その番号を削除するコマンド自体が、間違ったエントリを取得します。ただし、history -d $( history | awk 'END{print $1-1}' )行選択、フィールド選択、および減算を組み合わせます。
-dave_thompson_085

誰かがこれをzshellに移植するのを手伝う可能性はありますか?
アレックスS

6

いつでもエントリを編集および削除でき~/.bash_historyます。1つのエントリまたは複数のエントリを削除する場合に便利です


2
ほとんどの場合、これらのエントリはシェルを終了すると再導入されます。
l0b0

5

bashセッション全体を忘れたい場合はkill、現在のbashプロセスを実行できます。変数は現在のシェルのを$$保持するためpid、次のことができます。

kill -9 $$

1

履歴をクリアした後、変更を書き込む必要があります。また、履歴に履歴ワイプコマンドを使用したくない場合は、次のようなコマンドを実行する必要があります。

history -c && history -w && logout

幸運を。


-1
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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.