bash履歴の変更を元に戻す方法はありますか?


9

上に押すと、以前に入力したコマンドを確認できます。ただし、そのうちの1つを変更すると、履歴が変更されることに気づきました。たとえば、次のように入力すると、

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

履歴は、2番目のコマンドがであったことを示してecho decho bます。どうすればecho b歴史の最初の人を維持できますか?

たとえば、多くのオプションを指定して、非常に長いコマンドを実行するとします。その後、マイナーな変更を加えてもう一度実行したいので、履歴を調べて変更を加えますが、実際には再実行する必要はなく、別のオプションを考えているだけです。代わりに行います。その後、戻って、自分が実行したコマンドを思い出させたいのですが、ちょっと待ってください。履歴が間違ったものを表示しています。

これはめったに発生しませんが、発生したときは本当にイライラします。元の履歴を自動的に保存する方法はありますか?


1
history、あなたはすべてのコマンドを表示することができます。必要なものを選択できます。現在どのシェルを使用していますか?
Hastur 2014年

6
再現できません。cをdに変更した場合、CTRL + Cを押してからもう一度[上]を押しても、と表示されecho cます。
Martin von Wittich、2014年

回答:


6

あなたに入れてみてください ~/.inputrc

 set revert-all-at-newline on

場合によっては、デフォルト値(オフ)で見つけることができます。実行時に戻る前に、履歴行へのすべての変更を
強制的readlineに取り消す必要accept-lineがあります。(詳細はをman bash参照)。

編集:
CTRL+cからset revert-all-at-newline on正常に動作しますbash-4.3.30

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

だが:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

いいですね、これはより良いソリューションです。興味深いことに、CTRL-cは実際に変更された値を記憶させますが、行を完全に消去するか下向きに矢印を押してから、Enterキーを押すか別のコマンドを実行すると、履歴が復元されます。
Dean Serenevy 2014年

@DeanSerenevy:ありがとう、私もあなたの回避策が好きで、CTRL-a nanoも使い始めました:-)
Hastur

4

通常:

CTRL-a # ENTER

それを行います。

変更したコマンドを実行すると、元のコマンドが記憶されます。もちろん、実際には実行したくないので、で行をコメント化できます#

あなたの例では、あなたがあなたの歴史を持っているでしょう:echo aecho becho c# echo d


1
alt-shift-3bashがを使用してreadlineいる場合は、を押して現在のコマンドラインをコメントアウトできます。 /insert-commentin man 3 readline(またはman bash)for more in info。
サイチョイ2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.