进程的返回值和数量的比较

进程的返回值和数量的比较

我有一个val.py返回负数的 python 脚本。

import sys
sys.exit(-1234)

当我运行这个 bash 脚本时,我得到的$?返回值是 46(不是 -1234)。即使当我尝试将值与$? == 46or进行比较时$? == "46",它也根本不起作用。

python val.py
echo $?

if [ $? == 46 ]; then
    echo "Match"
else
    echo "NO"
fi
  • Q1:为什么返回值没有正确存储$?
  • Q2:为什么是$? == 数字比较不起作用?

答案1

exit()进程传递给的状态被屏蔽为单个字节,因此它限制在范围内[0-255]。请参阅exit文档:

status 的值可以是 0、EXIT_SUCCESS、EXIT_FAILURE 或任何其他值只有最低有效 8 位(即状态 & 0377)可供等待的父进程使用

在二进制补码实现中,-1234d == 0x...ffffb2e、 和0x2e == 46d,因此您看到的结果是预期的。

对于第二个问题,您的if声明正在测试 的退出状态echo $?,而不是 python 程序的退出状态。

尝试:

python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...

相关内容