我有一个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)
$??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)