Załóżmy, że chcę wykonać sekwencję czterech poleceń, które wcześniej wykonałem. Jeśli pierwszy to 432 w historii poleceń, mógłbym zrobić:
$ !432; !433; !434; !435
Jestem ciekawy, czy istnieje bardziej skuteczny sposób na osiągnięcie tego?
bash
command-line
command-history
Eric Wilson
źródło
źródło
history -p \!43{2..5}
aby wydrukować polecenia od 432 do 435 na terminalu, odpowiednie do późniejszego kopiowania / wklejania.Odpowiedzi:
Jeśli odnosi się do ostatnio uruchomionych poleceń, bardziej efektywnym sposobem jest odniesienie ich do liczb ujemnych:
Ponadto, gdy to zrobisz, twój ostatni wpis historii będzie zawierał cały łańcuch poleceń, więc możesz to powtórzyć
!!
.Edycja: Jeśli jeszcze tego nie zrobiłeś, zapoznaj się ze wspaniałą wbudowaną funkcją
fc
, o której wspomniał Gilles . (Użyjhelp fc
.) Okazuje się, że możesz również używać liczb ujemnych, więc możesz zrobić to samo, co powyżej, używającMa to jednak jedno zastrzeżenie: po tym
eval
wiersz jest zapisywany w historii jako ostatnie polecenie. Więc jeśli uruchomisz to ponownie, wpadniesz w pętlę!Bezpieczniejszym sposobem na to jest użycie domyślnego
fc
trybu działania: przekazanie wybranego zakresu poleceń do edytora i uruchomienie ich po wyjściu z niego. Próbować:Możesz nawet odwrócić kolejność zakresu poleceń:
fc -1 -4
źródło
Aby wyświetlić zakres poleceń w historii, użyj wbudowanego
fc
polecenia:Aby wykonać je ponownie:
źródło
man fc
nic mi nie daje. Co oznaczafc
skrót Jakie są inne opcje?help fc
... a takżehelp help
.... help: help [-dms] [pattern ...] Wyświetla informacje o wbudowanych poleceniach.-l
flagi wykona się bez potrzeby złaeval
.fc
oznacza „znajdź polecenie” lub „napraw polecenie”.Istnieje przyjemny i alternatywny sposób uruchamiania wielu poleceń w sekwencji z historii Bash:
zamiast używać zastępowania historii (
!432
lub!-4
), możesz przeszukiwać historię za pomocą Ctrl+ r, a gdy znajdziesz pierwsze polecenie, które chcesz uruchom, naciśnij Ctrl+ o( operuj i idź dalej ) zamiast returnklawiszaSpowoduje to uruchomienie polecenia i zaproponowanie następnego z historii. Możesz trafić Ctrl+otyle razy, ile chcesz i zakończyć sekwencję albo returnna ostatnią, albo Ctrl+czatrzymać się bez uruchamiania.
źródło
Ctrl-o
prostu wysyła literał^o
i łamie mój(reverse-i-search)
. Może wiąże się to z innymi ustawieniami.Aby natychmiast wykonać polecenia zamiast je edytować, oto syntaktycznie cieńsza wersja odpowiedzi Gilesa z użyciem eval :
Argument dwukropka -e to bash noop, który powoduje pominięcie kroku „otwórz w edytorze”, którego chce fc. Ponadto, teraz (najnowsza) historia będzie zawierać rzeczywiste polecenia z historii, a nie instrukcję eval.
źródło
fc
dla pętli ixsel
Działa to dobrze, gdy chcę połączyć i ponownie uruchomić ostatnie n poleceń wiele razy:
Następnie:
Lub w przypadku większych poleceń, które mogą wymagać edycji:
źródło