Ciao Crap grazie, ci hai salvato dalla fusione cerebrale
, i miei file d'esempio sono da dimenticare!
Per far vedere la differenza, ho fatto anche uno script uguale a
t.sh ma senza le impostazioni '
-e' e '
pipefail' che ho chiamato
t_norm.sh
eseguendo i due script si nota che le opzioni aggiunte, fanno "uscire" l'exit status dell'errore.
Codice: Seleziona tutto
8-) bash ./t.sh
c.sh
sleep: intervallo di tempo non valido: "err"
Try 'sleep --help' for more information.
8-) echo "$?"
11
8-) bash ./t_norm.sh
c.sh
sleep: intervallo di tempo non valido: "err"
Try 'sleep --help' for more information.
8-) echo "$?"
0
notare gli 'exit status,
11 e
0
Riassumendo:
1) si ottiene lo stesso output sia con le impostazioni '
-e' e '
pipefail', che senza.
2) usando le impostazioni '
-e' e '
pipefail' si ottiene l'exit status di un eventuale primo errore interno ai pipe.
3) in ogni caso, tutti gli "elementi" del pipe vengono eseguiti.
4) per interrompere una sequenza di comandi in caso di errore, i comandi vanno eseguiti uno per volta.
Quelle opzioni possono essere utile per fermare uno script, in caso di errore interno al pipe, ma non possono fermarlo prima della fine del pipe.
P.s.:Rileggendo il quote del mio primo post... avevo capito male! Si parla solo di exit status