TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Funkcje interakcji historii Basha nie oferują żadnego mechanizmu do sprawdzania wyników poleceń. Powłoka tego nie przechowuje , a ekspansja historii dotyczy specjalnie poleceń, które sam wykonałeś, lub części tych poleceń.
Pozostawia to podejście polegające na ponownym uruchomieniu ostatniego polecenia i przekazaniu zarówno stdout, jak i stderr ( |&) do podstawienia polecenia. Odpowiedź heemayla osiąga to, ale nie można jej użyć w aliasie, ponieważ powłoka wykonuje ekspansję historii przed rozwinięciem aliasów, a nie później.
Nie mogę też sprawić, by rozszerzenie historii działało w funkcji powłoki, nawet poprzez włączenie go w funkcji za pomocą set -H. Podejrzewam, !!że funkcja nigdy nie zostanie rozwinięta i nie jestem pewien, do czego by ją rozwinął, ale w tej chwili nie jestem pewien , dlaczego tak nie jest.
Dlatego jeśli chcesz skonfigurować rzeczy tak, abyś mógł to zrobić przy bardzo małym pisaniu, powinieneś użyć fcwbudowanej powłoki zamiast rozszerzenia historii, aby wyodrębnić ostatnie polecenie z historii. Ma to tę dodatkową zaletę, że działa nawet po wyłączeniu rozszerzania historii.
Jak pokazano w Gordon Davisson jest odpowiedzią na stworzenie aliasu zawierające interpretację historii bash (na Super User ), $(fc -ln -1)symuluje !!. To z podłączeniem do !!w dowodzenia heemayl za $(!! |& tail -1) plony:
$($(fc -ln -1) |& tail -1)
Działa to podobnie, $(!! |& tail -1)ale można przejść do definicji aliasu:
alias @@='$($(fc -ln -1) |& tail -1)'
Po uruchomieniu tej definicji, włożeniu jej .bash_aliaseslub .bashrcuruchomieniu nowej powłoki, możesz po prostu wpisać @@(lub jakkolwiek nazwałeś alias), aby spróbować wykonać ostatni wiersz danych wyjściowych z ostatniego polecenia.
ek@Io:~$ alias @@='$($(fc -ln -1) |& tail -1)'
ek@Io:~$ evolution
The program 'evolution' is currently not installed. You can install it by typing:
sudo apt-get install evolution
ek@Io:~$ @@
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
evolution-common evolution-data-server evolution-data-server-online-accounts
....