Saltar la navegación

Lista de comandos

Una lista de comandos es una secuencia de una o más tuberías separadas por uno de los siguientes operadores: ;, &, && ó ||, y terminada por cualquiera de los siguientes: ;, & o final de línea (pulsación de la tecla ENTER).

Cuando una tubería se separa con el operador & conseguimos que se ejecute en segundo plano. El shell no espera a que el comando finalice para pasar al siguiente. El estado de retorno es 0 (verdadero). Ejemplo:

$ ls -lR / 2> /dev/null >| listado & find / -empty 2> /dev/null | wc -l >| vacios &
[1] 8066
[2] 8068
$
[1]-  Salida 2                ls --color=auto -lR / 2> /dev/null >|listado
[2]+  Hecho                   find / -empty 2> /dev/null | wc -l >| vacios

En cambio, los comandos separados por un ; se ejecutan también secuencialmente, pero el shell espera a que cada comando finalice para pasar al siguiente. El estado de retorno es el del último comando ejecutado. Ejemplo:

$ who ; w
usuario  tty7         2013-09-04 12:42 (:0)
usuario  pts/0        2013-09-05 19:43 (:0)
 20:20:21 up 1 day,  2:38,  2 users,  load average: 0,00, 0,10, 0,14
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
usuario  tty7     :0               mié12    2days 18:14   0.10s gdm-session-worker [pam/gdm3]
usuario  pts/0    :0               jue19    5.00s  0.68s  0.01s w

La lista de comandos AND es la que separa las tuberías con &&. Su sintaxis sería así:

tubería && tubería [ && tubería ]...

En su forma más simple:

tubería1 && tubería2

solo tubería2 se ejecutará si tubería1 devuelve cero como estado de salida, es decir, si tubería1 se ejecuta bien. En general, las tuberías se irán ejecutando mientras no devuelvan errores, en cuanto una tubería se ejecute mal, se detendrá la ejecución de la lista AND.

$ find ~ -empty &> /dev/null && echo Existen ficheros vacíos
Existen ficheros vacíos

La lista de comandos OR es la que separa las tuberías con ||. Su sintaxis sería así:

tubería || tubería [ || tubería ]...

En su forma más simple:

tubería1 && tubería2

solo tubería2 se ejecutará si tubería1 devuelve como estado de salida un valor distinto de cero, es decir, si tubería1 da algún tipo de error. En general, las tuberías se irán ejecutando mientras devuelvan errores, en cuanto una tubería se ejecute correctamente se detendrá la ejecución de la lista OR.

$ find ~ -name backup &> /dev/null || touch ~/bin/backup

El estado de retorno de las listas AND y OR es el estado de salida del último comando que llegue a ejecutarse.

Los operadores &&, ||, ; y & pueden mezclarse, y los prioridades serían:

  1. &&, || (si van seguidos, primero el de la izquierda)
  2. ; & (si van seguidos, primero el de la izquierda)

Siempre, los distintos comandos que resulten de aplicar las prioridades, se ejecutarán de izquierda a derecha.

Por ejemplo, la lista de comandos siguiente

$ comando1 ; comando2 || comando3 && comando4

está formada por dos comandos secuenciales:

  1. comando1
  2. comando2 || comando3 && comando4

El segundo de los comandos secuenciales está formado por una lista OR y una lista AND.

  1. comando2 || comando 3 (c)
  2. c && comando4

Licencia: licencia de software libre GPL