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