Bash で編集した履歴行をリセットするにはどうすればいいですか?

Bash で編集した履歴行をリセットするにはどうすればいいですか?

Bash では、上矢印 (および下矢印) を押すと履歴を移動できます。その後、コマンドを実行する前に変更できます。コマンドを誤って変更してしまい、元の履歴にリセットしたい場合があります。これを行う方法はありますか?

空白行を実行してから、再度履歴をたどってみましたが、該当する行は編集されたままです。

答え1

元に戻すには Cx Cu (または C-_、その場合は C-/ と入力する必要があるかもしれません)

答え2

bash 履歴を含むファイルは、"~/.bash_history" です (少なくとも Ubuntu ではそうですが、他のバージョンでは異なる場合があります)。お気に入りのテキスト エディターで開くだけです。各ユーザーには独自の .bash_history ファイルがあることに注意してください。また、先頭の "." は隠しファイルであることを意味するため、-a を付けて使用しない限り、ファイル ブラウザーや ls コマンドでは表示されません。

答え3

このバインディングにより、実行されていない履歴の変更が元の履歴を上書きすることが防止されます。

bind 'set revert-all-at-newline on'

例:

  1. 実行するls
  2. 上矢印を押す
  3. -Al行に追加
  4. 下矢印を押す
  5. Return キーを押します(変更をキャンセルします)

このバインディングがないと、実行されなかったとしても、
ls履歴内で が に置き換えられます。ls -Al

このバインディングでは、
未実行のものls -Alは消え、ls残ります。

明らかにこれは、実行されていない歴史改変が一度もない保存されます(zshのデフォルトの動作と同様)。元のファイルのみを復元したい場合は時々、他の答えのいずれかを選択する必要があります。

関連情報