Estoy usando un conducto de varios comandos en bash. ¿Hay alguna manera de configurar bash para terminar todos los comandos en toda la canalización inmediatamente si uno de los comandos falla?Canalizaciones Shell: salga inmediatamente cuando falle un comando
En mi caso, el primer comando, digamos command1
, se ejecuta durante un tiempo hasta que produce algún resultado. Puede sustituir command1
por (sleep 5 && echo "Hello")
, por ejemplo.
Ahora, command1 | false
falla después de 5 segundos pero no de inmediato.
Este comportamiento parece tener algo que ver con la cantidad de salida que produce el comando. Por ejemplo, find/| false
regresa inmediatamente.
En general, me pregunto por qué bash se comporta así. ¿Alguien puede imaginar alguna situación donde sea útil que el código como command1 | non-existing-command
no salga de inmediato?
PD: El uso de archivos temporales no es una opción para mí, ya que los resultados intermedios que uso son demasiado grandes para ser almacenados.
PPS: Ni set -e
ni set -o pipefail
parecen influir en este fenómeno.
Esta pregunta se adapta mejor a http://unix.stackexchange.com. Probablemente obtendrás una buena respuesta allí. – dogbane