TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
As instalações de interação do histórico do Bash não oferecem nenhum mecanismo para examinar a saída dos comandos. O shell não armazena isso , e a expansão do histórico é específica para os comandos que você mesmo executou ou para partes desses comandos.
Isso deixa a abordagem de executar novamente o último comando e canalizar stdout e stderr ( |&) em uma substituição de comando. A resposta de heemayl consegue isso, mas não pode ser usada em um alias porque o shell executa a expansão do histórico antes de expandir os aliases, e não depois.
Também não posso fazer com que a expansão do histórico funcione em uma função shell, mesmo ativando-a na função com set -H. Eu suspeito que !!uma função nunca será expandida, e não tenho certeza para o que seria expandida, mas, no momento, não sei exatamente por que não é.
Portanto, se você deseja configurar as coisas para que você possa fazer isso com muito pouca digitação, use o fcshell interno em vez da expansão do histórico para extrair o último comando do histórico. Isso tem a vantagem adicional de funcionar mesmo quando a expansão do histórico está desativada.
Como mostrado na Gordon Davisson 's resposta para criar um apelido contendo expansão história do bash (em Super User ), $(fc -ln -1)Simula !!. Ligar o dentro para !!no comando do heemayl $(!! |& tail -1) rendimentos:
$($(fc -ln -1) |& tail -1)
Isso funciona como, $(!! |& tail -1)mas pode ter uma definição de alias:
alias @@='$($(fc -ln -1) |& tail -1)'
Depois de executar essa definição, colocá-la em .bash_aliasesou .bashrciniciar um novo shell, você pode simplesmente digitar @@(ou o que quer que tenha chamado de alias) para tentar executar a última linha de saída do último 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
....