Jak zapobiec zmianie historii przez Bash?


26

Jeśli naciskam strzałki w górę lub w dół na klawiaturze, a następnie modyfikuję coś z mojej historii, zmieni się to na zawsze. Nawet jeśli nacisnę Ctrl-C, a następnie spróbuję przywołać go ponownie, to i tak się zmieni - straciłem ten wpis w historii.

Jak mogę temu zapobiec?


3
Uwielbiam tytuł tego pytania. Możesz zmienić historię i narzekasz? Co z tobą nie tak?!
Daniel Beck

@Daniel: Lol, tak ... Mam na myśli, że zmieniam swoją przeszłość. Wyraźnie bezsensowne i po pewnym czasie staje się absurdalnie denerwujące. : \
Mehrdad

Btw, jeśli zamiast tego użyjesz history-search-xxx , zachowanie jest inne. Może to coś dla ciebie?
Daniel Beck

@Daniel: To naprawdę przydatne - wielkie dzięki. Ale nadal chciałbym poznać odpowiedź na to pytanie, ponieważ czasami polecenia nie wyglądają tak do siebie, a to nie działa.
Mehrdad

Wyszukiwanie historii z pustym pytaniem działa tak jak zwykła historia poprzednia / następna, tzn. wyświetla wszystkie wpisy.
Daniel Beck

Odpowiedzi:


17

Chcesz ustawienie readline:

set revert-all-at-newline on

Można też umieścić go w ~/.inputrc(patrz uwaga poniżej), lub umieścić bind 'revert-all-at-newline on'w twojej ~/.bashrc.

Próbny:

$ 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

Dalsze szczegóły znajdują się na stronie podręcznika Bash :

revert-all-at-newline

Jeśli ustawione na ' on', Readline cofnie wszystkie zmiany w liniach historii przed powrotem po wykonaniu linii akceptacji. Domyślnie wiersze historii mogą być modyfikowane i zachowują indywidualne listy cofnięć w połączeniach do readline. Domyślnie jest to „ off”.


Uwaga:

Jeśli ~/.inputrctworzony jest nowy plik w celu ustawienia revert-all-at-newline, pamiętaj, że bash użyje ustawień readline w tym pliku zamiast jakichkolwiek ustawień, które mogą znajdować się w pliku /etc/inputrc. Oznacza to, że wszelkie ustawienia określone w /etc/inputrcnie będą już obowiązywać. Dlatego jeśli /etc/inputrcplik istnieje, dobrym pomysłem jest rozpoczęcie ~/.inputrcod wiersza:

$include /etc/inputrc


Jesteś niesamowity, właśnie tego potrzebuję. Nie chcę już uderzać mojego monitora. : D +1000000 (Chciałbym)
Mehrdad

5

Wchodzę:

ls /tmp

- wspaniale. Teraz nie chcę wchodzić

ls /temp 

i może uniemożliwić przejście do historii, dlatego też nie może zastąpić ls / tmp, jeśli uruchomię polecenie spacją:

 ls /temp

Trudno to zobaczyć, ale jeśli o tym wiesz ...

Jest kontrolowany przez

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoredups ignoruje tylko zduplikowane polecenia, ignoreboth ignoruje spacje na początku wiersza, co jest przydatne, aby ukryć w przeciwnym razie ukryte hasła.

Ale może szukasz rozwiązania, które kończy się na obu poleceniach, niezmodyfikowanym starym i nowym. Moja wersja basha lub ustawień zachowuje się w ten sposób, ale nie wiem, co różni się od twojej.


Ha; Zawsze zakładałem, że nie zapisywanie poleceń z wiodącą spacją było błędem. Dzięki. :)
sarnold
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.