Acabo de hacer una pregunta sobre cómo bifurcar un proceso para dormir en el fondo.
La notación que se me ocurrió se ve así:
sleep 10 && echo "hello world" &
Esta respuesta a una pregunta diferente usa un formato diferente.
( sleep 10 ; echo "hello world" ) &
Sé que &&
solo permite que el segundo proceso se inicie si el primero devuelve verdadero. ¿Puede fallar el sueño? ¿Hay alguna situación en la que prefiera uno sobre el otro?
shell
background-process
sleep
Baarn
fuente
fuente
Respuestas:
El sueño puede fallar si se termina durante la ejecución:
Dado que sleep es un ejecutable externo, también es concebible que las llamadas fork o exec puedan fallar, lo que también provocaría que bash genere un código de error> 0.
fuente
a; b
siempre ejecuta el segundo comando después del primero, mientras quea && b
ejecuta el segundo comando solo si el primero tiene éxito, es decir, solo si el primer comando devuelve el estado 0.sleep
siempre devuelve el estado 0, excepto cuando es eliminado por una señal, en cuyo caso el estado es 128 + número de señal. (El estado también puede ser 126 o 127 si elsleep
comando no existe o si el programa no puede iniciarse debido a la falta de recursos, pero es muy poco probable que encuentre estos casos).Por lo tanto, debe usar
;
o,&&
según lo que quiera que suceda, si se interrumpe el sueño:sleep 10; echo hello
imprime el mensaje después de 10 segundos (menos sisleep
una señal lo mata);sleep 10 && echo hello
imprime el mensaje después de 10 segundos, pero no imprime nada sisleep
una señal lo mata.fuente
Debe suponer que cualquier comando puede fallar por varias razones, incluso si es muy poco probable que falle el sueño.
significa dormir en segundo plano y ejecutar el eco después del proceso de dormir, pero si el sueño falla, el eco se ejecutará de todos modos, vea la explicación completa
significa que debe esperar el final de la suspensión antes de hacer eco de cualquier cosa y, si el eco falla, el proceso se detiene pero todo el comando también está en segundo plano. ver explicación completa
Conclusión,
la primera sintaxis es el script de shell, lo que significa que está considerando las instrucciones por separado como una lista.
La segunda opción usa && significa Y, por lo tanto, si la usa si el primer comando falla, el segundo no se ejecutará.
Este es solo un comportamiento diferente en el manejo de errores.
fuente