W Bash istnieje kilka przydatnych operatorów do powtarzania części ostatniego polecenia:
!^
rozwija się do pierwszego argumentu poprzedniego polecenia, np.$ echo one "two three" one two three $ echo !^ echo one one
!$
rozwija się do ostatniego argumentu poprzedniego polecenia, np.$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
rozwija się do wszystkich argumentów poprzedniego polecenia, np.$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(O ile dobrze rozumiem, to cukier syntaktyczny dla !!:^
, !!:$
i !!:*
, odpowiednio, gdzie !!
jest oznaczenie zdarzenie, które rozwija się do poprzedniego polecenia, a także ^
, $
i *
to Oznaczenia słowne, zobacz Bash Reference Manual lub man bash
).
Często są one bardzo przydatne. Ale robi się jeszcze fajniej dzięki skrótom klawiaturowym:
Kiedy naciśniesz Alt+ .lub Alt+ _, ostatni argument poprzedniego polecenia zostanie wstawiony do bieżącego polecenia, podobnie jak gdybyś napisał
!$
w tym momencie.Możliwe jest także naciśnięcie Alt+ Ctrl+, yaby wstawić pierwszy argument poprzedniego polecenia, tak jakbyś napisał
!^
w tym momencie.
(Zobacz bibliotekę GNU Readline lub info readline
.)
Wolę skróty klawiaturowe niż operatory historii Basha, ponieważ widzę, co wstawiam, zanim faktycznie wykonam polecenie. Wydaje się jednak, że nie ma skrótu, który pozwala mi wstawić wszystkie słowa poprzedniego polecenia, tzn. Takiego, który wykonuje swoją !*
pracę. Przynajmniej nie mogłem tego znaleźć.
Czy istnieje taki skrót? Jeśli nie, to czy można skonfigurować bibliotekę readline, aby ją dodać i jak?
zsh
wpisaniu, echo !*
a następnie naciśnięciu klawisza TAB, uzyskasz pożądany efekt. Ogólnie rzecz biorąc, TAB podczas odczytu rozszerzy wszystkie rozwijane. Bardzo przydatny; prawdopodobnie bash będzie miał konfigurację z tym samym skutkiem? @Seth, myślę, że to readline na bash, a nie emulator terminala - choć nie jestem pewien.
man bash
\e.
i \e_
są mapowane na funkcję readline yank-last-arg
i \e\C-y
jest mapowane na yank-nth-arg
. Niestety wydaje się, że nie ma (pojedynczego) polecenia, które dodałoby wiele poprzednich argumentów jednocześnie.