![为什么脚本开始时退出状态始终为 0?](https://linux22.com/image/85226/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%84%9A%E6%9C%AC%E5%BC%80%E5%A7%8B%E6%97%B6%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81%E5%A7%8B%E7%BB%88%E4%B8%BA%200%EF%BC%9F.png)
我有一个这样的脚本,名为judge
:
#!/bin/bash
echo "last exit status is $?"
它始终输出“最后退出状态为 0”。例如:
ls -l; judge # correctly reports 0
ls -z; judge # incorrectly reports 0
beedogs; judge # incorrectly reports 0
为什么?
答案1
每行代码都有不同的 bash 进程执行,并且$?
进程之间不共享。您可以通过创建judge
bash 函数来解决此问题:
[root@xxx httpd]# type judge
judge is a function
judge ()
{
echo "last exit status is $?"
}
[root@xxx httpd]# ls -l / >/dev/null 2>&1; judge
last exit status is 0
[root@xxx httpd]# ls -l /doesntExist >/dev/null 2>&1; judge
last exit status is 2
[root@xxx httpd]#
答案2
正如评论中所讨论的, $?变量保存最后一个向 shell 返回值的进程的值。
如果judge
需要根据先前的命令状态执行某些操作,您可以让它接受一个参数,并传入状态。
#!/bin/bash
echo "last exit status is $1"
# Or even
return $1
所以:
[cmd args...]; judge $?