Niektóre przypadki bash zmieniają historię poleceń, kiedy ponownie używasz i edytujesz poprzednie polecenie, inne najwyraźniej nie. Szukałem i szukałem, ale nie mogę znaleźć niczego, co mówi, jak zapobiec modyfikowaniu poleceń w historii, gdy są one ponownie używane i edytowane.
Są to pytania, takie jak ten , ale to zdaje się mówić, jak radzić sobie z historią edytowany. Dopiero niedawno natknąłem się na instancję bash, która edytuje historię po ponownym użyciu polecenia - wszystkie poprzednie powłoki bash, których użyłem, zostały (o ile zauważyłem) skonfigurowane tak, aby nie zmieniać historii, gdy ponownie używasz i edytuj polecenie. (Być może po prostu nie zwracałem należytej uwagi na moją historię muszli przez ostatnie 15 lat ...)
To chyba najlepsze pytanie: CZY mogę powiedzieć bash NIGDY nie modyfikować historii - a jeśli tak, to w jaki sposób?
źródło
history -p
go do rozszerzenia historii bez wpływu na plik historii. Możesz zrobićhistory -s
to samo i dołączyć do historii bez wykonania. Możesz zrobić,HISTIGNORE='start of a command I never want in history.*:command2.*'
aby niektóre polecenia pozostały poza historią.set revert-all-at-newline on
pytanie, które łączysz, nie rozwiązuje twojego problemu? Czy możesz pokazać, jak odtworzyć problem? Pamiętaj, że możesz również użyćzsh
do zachowania bardziej zgodnego z tym, czego chcesz.history -p
jest czymś, co musiałbym zrobić dla każdego polecenia, którego chcę ponownie użyć - prawda? Jeśli tak, to nie do końca tego szukam. Jak wspomniałem, użyłem wystąpień bash, które nigdy nie modyfikują historii, gdy polecenie jest ponownie używane i edytowane.revert-all-at-newline
jest dokładnie tym, czego potrzebuję. Jeśli edytuję polecenie i naciskam CTRL-C, aby je anulować, nie chcę też, aby wpłynęło to na historię. Nigdy wcześniej nie musiałem konfigurować bash, aby nie modyfikował historii, co jest częściowo powodem, dla którego jestem zdezorientowany, dlaczego czasami nowa instalacja zachowuje się w jeden sposób, a czasem w inny. Nawiasem mówiąc, w instancji, która nie edytuje historii przy ponownym użyciu polecenia,bind -V | grep revert
wskazuje, żerevert-all-at-newline
jest ustawione na „wyłączone”.bash
. Chodzi o readline. Istnieją różne implementacjereadline
biblioteki, a także ma własny zestaw ustawień (DUŻO z nich) i własny plik konfiguracyjny. Nie jestem pewien, czy jest to ustawienie, czy po prostu różnica w implementacji, ale powinieneś szukać w dokumentacji związanej z readline, a nie bash.Odpowiedzi:
Okazuje się, że
revert-all-at-newline
to odpowiedź. Musiałem dołączyćset revert-all-at-newline on
do mojego~/.inputrc
pliku, ponieważ użycieset
polecenia w wierszu polecenia bash nie przyniosło żadnego efektu. (Wtedy oczywiście musiałem założyć nową powłokę.)Stwierdziłem również, że
~/.inputrc
jest ładowany zamiast/etc/inputrc
jeśli jest obecny, co oznacza, że wszelkie wartości domyślne zdefiniowane w tym ostatnim nie są już aktywne podczas tworzenia~/.inputrc
. Aby to naprawić, zacznij~/.inputrc
od$include /etc/inputrc
.Dzięki @ StéphaneChazelas za wskazanie mi właściwego kierunku.
źródło
W ~ / .bashrc możesz dodać
źródło
histappend
jest włączony, ale moja historia wciąż pokazuje zmiany poprzednich poleceń.