Bilmiyorum ashhiç. Bu genel geçici çözüm şu durumlarda bile çalışmalıdır sh:
psf=/tmp/pipestatus
: > "$psf" # to make the file empty
( dd if=/my/block/device; echo "1 $?" >> "$psf" ) \
| ( ssh myuser@otherserver "gzip > file.gz"; echo "2 $?" >> "$psf" )
Sonra içeriğini kontrol edin /tmp/pipestatus. Bir kusur var: yarış durumu, iki ( )blok paralel koşuyor, doğru sırayla değil dosyaya çıkabiliyorlar. Öyle kullandım >>ki hiçbir mesaj diğerinin üzerine yazmaz; "mesajlar" kısa, bu yüzden araya girmemeliler; "mesajları" numaralandırdım, sırayla olmasalar bile, doğru sırayı sonradan alabilirsiniz ( sort, cut).
Yukarıdaki kod zaten sadece bir örnektir. Daha sağlam bir çözüm yerine mktempgeçici bir dosya (lar) oluşturmak için printfkullanılır echo. Yarış koşullarından tamamen kurtulmak için ayrı dosyalara yazmanız gerekir :
psd="$(mktemp -d)"
# you may want to check if the above command succeeded
( dd if=/my/block/device; printf '%s\n' "$?" > "$psd/f1" ) \
| ( ssh myuser@otherserver "gzip > file.gz"; printf '%s\n' "$?" > "$psd/f2" )
# retrieve the results here, they are in "$psd/f1" and "$psd/f2"
rm -rf "$psd"
unset psd
Bash'inki kadar iyi değil PIPESTATUSçünkü bazı dosya sistemlerine ve orada yazma yeteneğine dayanıyor, birkaç şey yanlış gidebilir ve yakalanmayabilir. Hala hiç olmamasından iyidir.
ashe özgü sağ sorunu çözmek için bir yol (varsa). Eğer böyle bir cevap yazarsanız, cevabımın altında bana bir yorum bırakın.