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' fcintegrato 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_aliaseso aver .bashrcavviato 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
....