你能在陷阱中访问退出命令的代码吗?

时间:2011-05-30 13:21:07

标签: bash

我明白我可以使用$?查看上次执行的命令的退出代码,但是如果我想确定是否已经抛出自己的“退出0”或“退出1”该怎么办?

例如:

#!/bin/bash -e    
trap "{ echo Exit code $?; exit; }" EXIT    
exit 1

如果我运行这个脚本,它会打印出“退出代码0”,然后退出并退出代码1.我可以访问陷阱中的代码,还是我只是以错误的方式进行操作?换句话说,我希望这个简单的脚本打印出“退出代码1”。

2 个答案:

答案 0 :(得分:4)

它是0,因为脚本开头的$?由于双引号而被替换为0。

请改为尝试:

trap '{ echo Exit code $?; exit; }' EXIT

答案 1 :(得分:1)

任何终止的进程都会设置$?,这意味着它会不断被覆盖。将$?保存到一个单独命名的var,该var是唯一的,并在退出时回显。

修改

请参阅Exit Shell Script Based on Process Exit Code