查看程序的退出代码(程序退出后)

时间:2016-03-06 07:34:57

标签: linux shell

让我们说一个程序在成功的情况下输出零,或者在失败的情况下输出1,如下所示:

if

与Python类似,如果执行exit(0)或exit(1)以指示运行脚本的结果。当你在shell中运行程序时,你如何知道程序输出的内容。我试过这个:

main () {
    if (task_success())
        return 0;
    else
        return 1;
}

但我没有在文件中得到结果。

2 个答案:

答案 0 :(得分:4)

命令的output和命令的退出代码之间存在差异。

您运行的内容./myprog 2> out会捕获命令的stderr,而不是上面显示的退出代码。

如果要在bash / shell中检查程序的退出代码,则需要使用捕获最后一个命令退出代码的$?运算符。

例如:

./myprog 2> out
echo $?

将为您提供该命令的退出代码。

顺便说一句, 要捕获命令的输出,您可能需要使用1作为重定向,其中1捕获stdout2捕获stderr

答案 1 :(得分:0)

命令的返回值存储在$?中。如果要对返回码执行某些操作,最好在调用另一个命令之前将其存储在变量中。另一个命令将在$?中设置新的返回码 在下一个代码中,echo将重置$?的值。

rm this_file_doesnt_exist
echo "First time $? displays the rm result"
echo "Second time $? displays the echo result"
rm this_file_doesnt_exist
returnvalue_rm=$?
echo "rm returned with ${returnvalue}"
echo "rm returned with ${returnvalue}"

如果您对stdout / stderr感兴趣,可以将它们重定向到文件。您还可以在shell变量中捕获它们并使用它执行某些操作:

my_output=$(./myprog 2>&1)
returnvalue_myprog=$?
echo "Use double quotes when you want to show the ${my_output} in an echo."
case ${returnvalue_myprog} in
   0) echo "Finally my_prog is working"
      ;;
   1) echo "Retval 1, something you give in your program like input not found"
      ;;
   *) echo "Unexpected returnvalue ${returnvalue_myprog}, errors in output are:"
      echo "${my_output}" | grep -i "Error"
      ;;
esac