Sto usando una pipe di diversi comandi in bash. C'è un modo di configurare bash per terminare immediatamente tutti i comandi dell'intera pipeline nel caso uno dei comandi fallisca?Tubo shell: uscire immediatamente quando un comando non riesce
Nel mio caso, il primo comando, ad esempio command1
, viene eseguito per un po 'finché non produce un output. Ad esempio, è possibile sostituire command1
per (sleep 5 && echo "Hello")
.
Ora, command1 | false
non riesce dopo 5 secondi ma non immediatamente.
Questo comportamento sembra avere qualcosa a che fare con la quantità di output prodotta dal comando. Ad esempio, find/| false
restituisce immediatamente.
In generale, mi chiedo perché bash si comporta in questo modo. Qualcuno può immaginare una situazione in cui è utile che il codice come command1 | non-existing-command
non termini immediatamente?
PS: L'utilizzo di file temporanei non è un'opzione per me, poiché i risultati intermedi che ho intorno sono troppo grandi per essere archiviati.
PPS: Né set -e
né set -o pipefail
sembrano influenzare questo fenomeno.
Questa domanda è più adatta a http://unix.stackexchange.com. Probabilmente otterrai una buona risposta lì. – dogbane