Bashが履歴を変更するのを防ぐ方法は?


26

キーボードの上矢印または下矢印を押して、履歴から何かを変更すると、永久に変更されます。Ctrl-Cを押してからもう一度起動しようとしても、変更されたままです。履歴でそのエントリが失われています。

これを防ぐにはどうすればよいですか?


3
この質問のタイトルが大好きです。あなたは実際に歴史を変えることができ、あなたは不平を言っていますか?どうしたの?!
ダニエルベック

@ダニエル:笑、ええ...つまり、まるで過去を変えているかのようです。明らかに無意味で、しばらくするととんでもなく迷惑になります。:\
Mehrdad

ところで、代わりにhistory-search-xxxを使用すると、動作が異なります。たぶんそれはあなたにとって何か?
ダニエルベック

@ダニエル:それは確かに便利です-どうもありがとう。しかし、それでも、この質問の答えを知りたいのです。なぜなら、コマンドが互いにあまり似ていないことがあり、それがうまくいかない場合があるからです。
Mehrdad

空のプロンプトを使用した履歴検索は、通常の履歴prev / nextと同様に機能します。つまり、すべてのエントリを表示します。
ダニエルベック

回答:


17

readline設定が必要です:

set revert-all-at-newline on

挿入するか~/.inputrc(下の注を参照)、またはに挿入できbind 'revert-all-at-newline on'ます~/.bashrc

デモ:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

詳細はBashのマンページにあります:

revert-all-at-newline

' on'に設定すると、Readlineは、accept-lineが実行されたときに戻る前に、履歴行へのすべての変更を取り消します。デフォルトでは、履歴行が変更され、readlineの呼び出し全体で個々の取り消しリストが保持されます。デフォルトは ' off'です。


注意:

~/.inputrc設定の目的で新しいファイルが作成される場合、revert-all-at-newlinebashはファイルにある設定の代わりにこのファイルのreadline設定を使用することに注意して/etc/inputrcください。つまり、で指定された設定/etc/inputrcは無効になります。したがって、/etc/inputrcファイルが存在する場合は~/.inputrc、次の行から始めることをお勧めします。

$include /etc/inputrc


あなたは素晴らしいです、それはまさに私が必要なものです。もうモニターをパンチしたくありません。:D +1000000(希望)
Mehrdad

5

私が入ります:

ls /tmp

-素晴らしい。今は入りません

ls /temp 

履歴を入力することを防ぐことができるため、空白でコマンドを開始した場合、ls / tmpを上書きすることを防ぐことができます:

 ls /temp

見づらいですが、知っていれば......

によって制御されます

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoreupsは重複したコマンドのみを無視し、ignorebothは行頭のスペースを無視します。これは、隠されていないパスワードを隠すのに便利です。

しかし、解決策を求めているかもしれません。変更されていない古いコマンドと新しいコマンドの両方のコマンドで終わります。私のバージョンのbashまたは設定はこのように動作しますが、あなたのものとは何が違うのかわかりません。


ハ; コマンドの先頭にスペースを入れて保存しないのはバグだといつも思っていました。ありがとう。:)
sarnold
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.