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

pro*_*eek 5 process exit

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

import sys
sys.exit(-1234)
Run Code Online (Sandbox Code Playgroud)

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

python val.py
echo $?

if [ $? == 46 ]; then
    echo "Match"
else
    echo "NO"
fi
Run Code Online (Sandbox Code Playgroud)
  • Q1:为什么返回值没有正确存储在$?
  • Q2:为什么是$?== NUM​​BER 比较不起作用?

Mat*_*Mat 12

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

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

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

对于您的第二个问题,您的if语句正在测试来自 的退出状态echo $?,而不是来自您的 Python 程序的退出状态。

尝试:

python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...
Run Code Online (Sandbox Code Playgroud)