(16 jawaban)
Tutup tahun lalu.
Saya memiliki skrip build yang menjalankan perintah panjang yang menghasilkan banyak output seperti ini:
./compile
Untuk memecahkan masalah kinerja kompilasi, saya ingin menggunakan ts (dari moreutils) yang mengawali setiap baris keluaran dengan stempel waktu. Jadi saya memperbarui skrip saya seperti ini:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
Ini berfungsi, tetapi sekarang nilai keluar selalu , peristiwa ketika compile gagal (saya pikir, karena ts keluar tanpa kesalahan).
Bagaimana saya bisa memperbarui skrip saya untuk mengembalikan compile kode keluar saat menggunakan ts ?
Jawaban yang Diterima:
Karena Anda menggunakan Bash, Anda dapat menggunakan $PIPESTATUS yang merupakan larik yang berisi kode keluar yang berbeda dari perintah dalam pipa:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh memiliki fitur serupa tetapi menggunakan $pipestatus array sebagai gantinya (ingat juga zsh array diberi nomor dari 1 , bukan ).