TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Le strutture di interazione della cronologia di Bash non offrono alcun meccanismo per esaminare l' output dei comandi. La shell non lo memorizza e l'espansione della cronologia è specifica per i comandi eseguiti dall'utente o parti di tali comandi.
Questo lascia l'approccio di rieseguire l'ultimo comando e reindirizzare sia stdout che stderr ( |&
) in una sostituzione di comando. La risposta di heemayl raggiunge questo obiettivo , ma non può essere utilizzata in un alias perché la shell esegue l'espansione della cronologia prima di espandere gli alias e non dopo.
Non riesco nemmeno a far espandere l'espansione della cronologia in una funzione shell, anche abilitandola nella funzione con set -H
. Ho il sospetto che !!
una funzione non verrà mai espansa e non sono sicuro di cosa si espanderebbe se fosse, ma in questo momento non sono sicuro del perché .
Pertanto, se si desidera impostare le cose in modo da poterlo fare con pochissima digitazione, è necessario utilizzare l' fc
integrato della shell anziché l'espansione della cronologia per estrarre l'ultimo comando dalla cronologia. Questo ha l'ulteriore vantaggio che funziona anche quando l'espansione della cronologia è disabilitata.
Come mostrato nella Gordon Davisson 's risposta alla creazione di un alias che contengono l'espansione della storia bash (su Super User ), $(fc -ln -1)
Simula !!
. Collegandolo a for !!
nel comando di heemayl si $(!! |& tail -1)
ottiene:
$($(fc -ln -1) |& tail -1)
Funziona come, $(!! |& tail -1)
ma può andare in una definizione alias:
alias @@='$($(fc -ln -1) |& tail -1)'
Dopo aver eseguito quella definizione o averla inserita .bash_aliases
o aver .bashrc
avviato una nuova shell, è possibile semplicemente digitare @@
(o come si chiama l'alias) per tentare di eseguire l'ultima riga di output dall'ultimo comando.
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
....