Shell pipe: Salga inmediatamente cuando falla un comando
Estoy usando una tubería de varios comandos en bash. ¿Hay alguna forma de configurar bash para terminar todos los comandos en toda la tubería de inmediato si uno de los comandos falla?
En mi caso, el primer comando, digacommand1
, se ejecuta durante un tiempo hasta que produce algo de salida. Puedes sustituircommand1
por(sleep 5 && echo "Hello")
, por ejemplo
Ahora,command1 | false
falla después de 5 segundos pero no inmediatamente.
Este comportamiento parece tener algo que ver con la cantidad de salida que produce el comando. Por ejemplo,find / | false
regresa de inmediato.
En general, me pregunto por qué bash se comporta así. ¿Alguien puede imaginar alguna situación en la que sea útil ese código comocommand1 | non-existing-command
no sale a la vez?
PS: Usar archivos temporales no es una opción para mí, ya que los resultados intermedios que utilizo son demasiado grandes para ser almacenados.
PPS: Niset -e
norset -o pipefail
parece influir en este fenómeno.