2010-12-17 20 views
6

Şimdilik zincirleme komutlar için hata işleme nasıl yapılır merak ediyorum. çalıştırılmaya devam eder kedi başarısızbir bash komut dosyasında zincirleme komutları (borular) ile işleme hatası?

cat file | gzip >/tmp/test 

if (çünkü örneğin dosya eksik), gzip ve nedenle son saklanan çıkış kodu: Aşağıdaki kolay göstermek için benim sorunum sadece bir örnektir , $?, . set -e, bu durumda da yardımcı olmayacaktır.

Bunun için en iyi çözüm nedir acaba?

Teşekkürler!

trap 'echo "ERR caught"' ERR 
set -o pipefail 
cat file | gzip >/tmp/test 

çıktı dosyası hala (yaratılış paralel yapılır) ve gzip idare edilecek oluşturulacak, ancak temizleme yapabilirsiniz:

+0

$ PIPESTATUS'u denediniz mi? Bash için çalışmalı. – khachik

+0

Bunu bile bilmiyordum. Teşekkürler! – aurora

cevap

8

bu deneyin. Hatanın oluştuğu yeri görmek için ${PIPESTATUS[@]} dizisini kullanın. Hatayla ilgili ek bilgi için $BASH_COMMAND ve $BASH_LINENO kullanabilirsiniz.

+0

vay - bu çok güzel. Bu olasılığı bilmiyordum. çok teşekkürler! – aurora

İlgili konular