Shell 进程返回状态测试在ubuntu上返回意外结果
下面是我在ubuntu机器上执行的一段shell脚本代码:Shell 进程返回状态测试在ubuntu上返回意外结果,shell,ubuntu,return,Shell,Ubuntu,Return,下面是我在ubuntu机器上执行的一段shell脚本代码: myProcess ret="$?" if [ "${ret}" == "0" ] then echo good else echo bad "${ret}" fi 因此,逻辑非常简单:如果myProcess返回非零退出状态,则为坏,否则为好。我通过将这段代码隔离到单独的脚本中并从命令行运行来测试它。当myProcess返回0时,我得到了预期的good 但是,当我在生产环境中运行它时,会得到错误的0。因此,即使返回代码似
myProcess
ret="$?"
if [ "${ret}" == "0" ]
then
echo good
else
echo bad "${ret}"
fi
因此,逻辑非常简单:如果myProcess
返回非零退出状态,则为坏,否则为好。我通过将这段代码隔离到单独的脚本中并从命令行运行来测试它。当myProcess
返回0时,我得到了预期的good
但是,当我在生产环境中运行它时,会得到
错误的0
。因此,即使返回代码似乎为0,但if
测试似乎返回false
。这里发生了什么?有一种更简单的方法(无需处理$?
并创建变量的副本):
如果myProcess
编码正确,应该可以正常工作。如果没有,请将准确的输出/错误粘贴到原始帖子中
这种简短的方式被称为布尔逻辑。问题似乎在于使用了太多的引号,可能与
=
结合使用。以下修改后的代码似乎工作正常:
myProcess
ret=$?
if [ ${ret} -eq 0 ]
then
echo good
else
echo bad "${ret}"
fi
但是我上面的代码有什么问题?我需要捕获返回代码,因为在“坏”的情况下,我需要将其作为参数之一传递给一个进程,该进程会为这种情况生成一个特殊警报。您的“shebang”行是什么<代码>#/bin/bash或#/bin/sh`?(现在看不出这有什么关系,但由于您没有显示整个脚本,使用bash执行与原始Bourne Shell之间可能存在不兼容。)祝您好运。@Shelleter:这是
#/bin/sh
。另外,如果有必要,在生产环境中,这个脚本将作为cron作业执行。我认为BourneShell不支持==
。。根据您的操作系统,是您的#/bin/sh
真的是Bash或Bourne。首先尝试一下=
,如果这不能解决问题,那么就用“X${ret}X”=X0X“
,echo bad X${ret}X
调试ret
的实际值。祝你好运。
myProcess
ret=$?
if [ ${ret} -eq 0 ]
then
echo good
else
echo bad "${ret}"
fi