TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Las instalaciones de interacción histórica de Bash no ofrecen ningún mecanismo para examinar la salida de los comandos. El shell no almacena eso , y la expansión del historial es específicamente para comandos que usted mismo ha ejecutado o partes de esos comandos.
Esto deja el enfoque de volver a ejecutar el último comando y canalizar tanto stdout como stderr ( |&) en una sustitución de comando. La respuesta de heemayl logra esto, pero no se puede usar en un alias porque el shell realiza la expansión del historial antes de expandir los alias, y no después.
Tampoco puedo hacer que la expansión del historial funcione en una función de shell, incluso habilitándola en la función con set -H. Sospecho que !!una función nunca se expandirá, y no estoy seguro de a qué se expandiría si lo fuera, pero en este momento no estoy seguro de por qué no lo es.
Por lo tanto, si desea configurar las cosas para poder hacerlo con muy poca escritura, debe usar el fcshell incorporado en lugar de la expansión del historial para extraer el último comando del historial. Esto tiene la ventaja adicional de que funciona incluso cuando la expansión del historial está desactivada.
Como se muestra en la respuesta de Gordon Davisson a la creación de un alias que contiene la expansión del historial de bash (en Super User ), simula . El tapar esto en para en comando de heemayl rendimientos:$(fc -ln -1)!!!! $(!! |& tail -1)
$($(fc -ln -1) |& tail -1)
Esto funciona como $(!! |& tail -1)pero puede ir en una definición de alias:
alias @@='$($(fc -ln -1) |& tail -1)'
Después de ejecutar esa definición, o ponerla .bash_aliaseso .bashrciniciar un nuevo shell, simplemente puede escribir @@(o lo que sea que haya llamado alias) para intentar ejecutar la última línea de salida del ú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
....