GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzare Ts senza perdere il valore di uscita?

Questa domanda ha già risposte qui :Ottieni lo stato di uscita del processo che è stato reindirizzato a un altro

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


Linux
  1. Perché una funzione principale senza un'istruzione return restituisce il valore 12?

  2. Come esco dallo "schermo" senza digitare "esci"?

  3. come usare kill SIGUSR2 in bash?

  4. Come posso usare grep per abbinare ma senza stampare le partite?

  5. Come posso utilizzare il comando tar per raggruppare i file senza compressione?

Come utilizzare ISPConfig e Seafile senza modifiche manuali ai file

Come usare TeamViewer su Ubuntu 20.04 Linux senza installazione

Usa i contenitori Docker Stop senza rovinare le cose!

Come usare il comando echo senza Newline

Come usare "yum downloadonly" per scaricare un pacchetto senza installarlo

Posso usare un comando (come albero) senza installarlo a livello di sistema?