(16 risposte)
Chiuso l'anno scorso.
Ho uno script di compilazione che esegue un lungo comando che produce molto output che è andato in questo modo:
./compile
Per risolvere i problemi relativi alle prestazioni della compilazione, voglio utilizzare ts
(da moreutils) che antepone a ciascuna riga di output un timestamp. Quindi ho aggiornato il mio script in questo modo:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
Funziona, ma ora il valore di uscita è sempre , evento quando
compile
fallisce (penso, perché ts
esce senza errori).
Come posso aggiornare il mio script per restituire compile
's codice di uscita durante l'utilizzo di ts
?
Risposta accettata:
Dato che stai usando Bash, puoi usare il suo $PIPESTATUS
che è un array contenente i diversi codici di uscita dai comandi in una pipeline:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh
ha una funzione simile ma usa $pipestatus
array invece (ricorda anche zsh
gli array sono numerati da 1
, non ).