“程序已中止”但未返回错误代码

时间:2011-12-30 03:58:52

标签: linux bash return-value

今天当我查看脚本的日志时, 我发现一个命令(unrar)失败了(“程序已中止”)但没有报告错误,

这是我的剧本摘录:

unrar ...|tail -10 >> unrar.log  #I found "Program Aborted" here

if [[ "${?}" -ne "0" ]] 
then 
    echo "[ERROR] unrar application failed with $? errorcode"
else
    echo "[INFO] unrar application succeeded"

这是由于我的脚本或系统本身有问题吗?

1 个答案:

答案 0 :(得分:4)

$?变量包含最后一个命令的退出状态。在你的情况下,这是“tail”命令的退出状态,它没有失败。在bash中,您要查找的退出状态位于PIPESTATUS数组中。您可以迭代数组以查看最后一个管道中的任何命令是否存在非零存在状态。

failed=false
for status in "${PIPESTATUS[@]}"; do
    if (( status != 0 )); then
       failed=true
       break
    fi
done

if $failed; then
   echo "[ERROR] unrar application failed with $status errorcode"
else
   echo "[INFO] unrar application succeeded"
fi