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?


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.