Her komuttan sonra, çıkış kodu $?
değişkende bulunabilir, böylece şöyle bir şey elde edersiniz:
ls -al file.ext
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
Borulu komutlara dikkat etmeniz gerekir, çünkü $?
sadece size borudaki son öğenin dönüş kodunu verir, böylece kodda:
ls -al file.ext | sed 's/^/xx: /"
dosya yoksa bir hata kodu döndürmez ( sed
boru hattının bir kısmı gerçekten çalıştığından 0 döndürür).
bash
Kabuk, aslında, bu durumda yardımcı olacak bir dizi sağlar olmak o PIPESTATUS
. Bu dizi, her bir boru hattı bileşeni için ayrı ayrı erişebileceğiniz bir öğeye sahiptir ${PIPESTATUS[0]}
:
pax> false | true ; echo ${PIPESTATUS[0]}
1
Bunun false
komut satırının tamamını değil, komutun sonucunu aldığını unutmayın . Ayrıca, listenin tamamını uygun gördüğünüz şekilde işleyebilirsiniz:
pax> false | true | false; echo ${PIPESTATUS[*]}
1 0 1
Bir boru hattından en büyük hata kodunu almak istiyorsanız, aşağıdaki gibi bir şey kullanabilirsiniz:
true | true | false | true | false
rcs=${PIPESTATUS[*]}; rc=0; for i in ${rcs}; do rc=$(($i > $rc ? $i : $rc)); done
echo $rc
Bu, her bir PIPESTATUS
öğeden sırayla geçer rc
ve önceki rc
değerden büyükse depolar.