Jawaban umum adalah tidak. Dimungkinkan untuk prog2
keluar prog1
bahkan sebelum mulai (jelas itu tidak dapat terjadi jika prog2
benar-benar membaca beberapa input, yang Anda harapkan akan dilakukan jika Anda menggunakannya dalam pipa). Sangat mungkin untuk prog2
keluar sebelum prog1
; ini terjadi misalnya ketika prog2
program pencarian yang keluar segera setelah menemukan kecocokan, dalam hal ini prog1
mungkin belum selesai menghasilkan semua data.
Tidak ada cara langsung untuk prog2
mengambil status keluar prog1
atau bahkan untuk mengetahui yang prog1
telah keluar. Yang prog2
bisa diketahui hanyalah bahwa prog1
ujung pipa itu sudah ditutup, yang bisa dilakukan tanpa sekarat.
Jika Anda ingin mendapatkan status keluar prog1
dari prog2
, ada dua metode umum: Anda dapat menulisnya ke file, atau Anda dapat mengirimkannya melalui pipa. Mengirim status output sebagai baris terakhir dari data yang disalurkan adalah suatu kemungkinan. Anda harus memastikan untuk tidak memproses baris terakhir sampai Anda tahu bahwa itu adalah baris terakhir, yaitu sampai Anda mencoba membaca baris berikutnya.
{ prog1; echo $?; } | …
Berikut adalah contoh di mana sisi kanan adalah filter teks yang mewarnai setiap baris yang mengandung kata "error" merah. Jika sisi kiri gagal, sisi kanan keluar dengan status yang sama.
{ prog1; echo $?; } | awk '
NR != 1 {
if (line ~ /[Ee][Rr][Rr][Oo][Rr]/) print "\033[31m" line "\033[0m";
else print line;
}
{line = $0}
END {exit($0)}
'