(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 ).