Comandos consecutivos

14

¿Estoy en lo cierto al suponer que cuando ;une dos comandos en una línea, Bash siempre espera hasta que el primer comando haya salido antes de ejecutar el segundo comando? Y de manera similar, en un script de shell que contiene dos comandos diferentes en diferentes líneas, ¿Bash siempre espera hasta que el comando en la primera línea haya salido antes de ejecutar el comando en la segunda línea?

Si este es el caso, ¿hay alguna forma de ejecutar dos comandos en una línea o en un script, de modo que el segundo comando no espere hasta que el primer comando haya terminado?

Además, ¿son las diferentes líneas en un script de shell equivalentes a líneas separadas unidas por ;o &&?

EmmaV
fuente

Respuestas:

26

Tienes razón, los comandos en los scripts se ejecutan secuencialmente por defecto.

Puede ejecutar un comando en segundo plano al agregarle un sufijo &(un ampersand).

Los comandos en líneas separadas son equivalentes a los comandos unidos ;por defecto. Si le dice a su shell que anule en códigos de salida distintos de cero ( set -e), el script se ejecutará como si todos los comandos estuvieran unidos &&.

Stephen Kitt
fuente
2

Para responder a su segunda pregunta, puede usar &para iniciar un comando en segundo plano y continuar con el script sin esperar a que termine.

commandA & commandB

Si ejecuta esto en una terminal interactiva (en lugar de un script), puede usar fgpara volver a enfocar el comando en segundo plano o jobspara ver una lista de tareas en segundo plano.

rmelcer
fuente