Atajos en bash

shell

Algunos atajos útiles en bash, vía variables de entorno.

Último comando ejecutado:

La variable $!! almacena el último comando ejecutado, con todos sus argumentos:
$ ntpdate
bash: ntpdate: no se encontró la orden
$ sudo !!
sudo ntpdate
12 Apr 15:24:56 ntpdate: no servers can be used, exiting

Argumento del último comando:

Con $_ (también sirve !$, son equivalentes) podemos obtener el argumento del último comando ejecutado:
$ ping -c 1 www.google.es
PING www.l.google.com (209.85.146.106) 56(84) bytes of data.
64 bytes from bru01s01-in-f106.1e100.net (209.85.146.106): icmp_req=1 ttl=49 time=77.2 ms
—- www.l.google.com ping statistics —-
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 77.218/77.218/77.218/0.000 ms
$ telnet $_
telnet www.google.es
Trying 209.85.146.105…
^C

Cabe señalar que si el comando anterior tuviera más de un argumento, sólo se obtiene el último:

$ cat uno dos
fichero uno
fichero dos
$ head $_
head dos
fichero dos

Si se quisieran obtener todos, hay que utilizar !*
$ cat uno dos
fichero uno
fichero dos
$ echo !*
echo uno dos
uno dos

PID del proceso bash:

Se almacena en la variable $$:
$ echo $$
8871

Resultado de la última ejecución

Para saber si el último comando que se ejecutó tuvo éxito, o qué valor de salida emitió, podemos consultar la variable $?. Normalmente se devuelve un 0 cuando el comando termina sin problemas, y un 1 cuando hay algún error. Sin embargo, algunos programas pueden devolver valores distintos.
$ cat dos
fichero dos
$ echo $?
0
$ cat tres
cat: tres: No existe el fichero o el directorio
$ echo $?
1
$ ntpdate
bash: ntpdate: no se encontró la orden
$ echo $?
127