Czy jest jakiś sposób, aby cofnąć modyfikację historii bash?

9

Naciskając w górę, mogę przejść przez poprzednio wprowadzone polecenia. Zauważyłem jednak, że modyfikowanie jednego z nich zmienia historię. Na przykład, jeśli napiszę:

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

historia pokazuje teraz, że drugie polecenie echo dnie było echo b. Jak zachować pierwszą echo bw historii?

Powiedzmy na przykład, że uruchamiam naprawdę długie polecenie z wieloma opcjami. potem chcę go uruchomić ponownie, z niewielką zmianą, więc wracam do historii, aby go znaleźć, wprowadzić zmiany, ale potem uświadamiam sobie, że tak naprawdę nie muszę go ponownie uruchamiać, po prostu pomyślałem o innej opcji zrobić zamiast tego. potem chcę wrócić i przypomnieć sobie, jakie polecenie wykonałem - ale poczekaj, historia pokazuje teraz niewłaściwą rzecz!

To pojawia się bardzo rzadko, ale kiedy tak się dzieje, uważam to za naprawdę irytujące. Czy istnieje sposób na automatyczne zachowanie oryginalnej historii?

Benubird
źródło
1
z historymożesz zobaczyć wszystkie polecenia. Po możesz wybrać to, czego potrzebujesz. Z której powłoki korzystasz teraz?
Hastur
6
Nie mogę tego odtworzyć. Jeśli zmienię c na d, naciśnij klawisze CTRL + C i ponownie naciśnij [w górę], to nadal mówi echo c.
Martin von Wittich

Odpowiedzi:

6

Spróbuj włożyć swój ~/.inputrc

 set revert-all-at-newline on

W niektórych przypadkach można go znaleźć w wartości domyślnej (Wyłącz).
Powinien wymusić readlinecofnięcie wszystkich zmian w wierszach historii przed powrotem, gdy accept-linezostanie wykonany. (więcej informacji w man bash).

Edycja:
CTRL+c i set revert-all-at-newline ondziała dobrze od tego czasu 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

Ale:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d
Hastur
źródło
Fajnie, to jest lepsze rozwiązanie. Co ciekawe, CTRL-c sprawi, że zapamięta zmodyfikowaną wartość, chociaż pełne usunięcie linii lub przewijanie w dół, a następnie naciśnięcie Enter lub uruchomienie innego polecenia przywróci historię.
Dean Serenevy
@DeanSerenevy: Dzięki, podobają mi się również twoje obejście i zaczynam też używać CTRL-a w nano:-)
Hastur
4

Zazwyczaj:

CTRL-a # ENTER

zrobię to.

Oryginalne polecenie zostanie zapamiętane, jeśli wykonasz zmodyfikowane polecenie. Oczywiście nie chcesz tak naprawdę wykonywać, więc możesz komentować linię za pomocą #.

W przykładzie, byś potem mieć w swojej historii: echo a, echo b, echo c, # echo d.

Dean Serenevy
źródło
1
Możesz nacisnąć, alt-shift-3aby skomentować bieżący wiersz poleceń, jeśli używasz bash readline. /insert-commentw man 3 readline(lub man bash), aby uzyskać więcej informacji.
szczegółowooi