Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么python脚本返回的值会被shell修改?_Bash_Shell_Linux Kernel_Return_Python 3.5 - Fatal编程技术网

Bash 为什么python脚本返回的值会被shell修改?

Bash 为什么python脚本返回的值会被shell修改?,bash,shell,linux-kernel,return,python-3.5,Bash,Shell,Linux Kernel,Return,Python 3.5,我的pythonscript看起来像这样 #!/usr/bin/python3 #File Name: pythonScript.py from sys import exit if '__name__'=='__main__':exit(402) 这是shell脚本 python3 pythonScript.py echo $? 它打印146。402如何映射到146?像这样的一些其他对是(402146),(100,0),(0,0),(56,0)等等 python脚本能否以这种方式向shel

我的pythonscript看起来像这样

#!/usr/bin/python3
#File Name: pythonScript.py
from sys import exit
if '__name__'=='__main__':exit(402)
这是shell脚本

python3 pythonScript.py
echo $?
它打印146。402如何映射到146?像这样的一些其他对是(402146),(100,0),(0,0),(56,0)等等

python脚本能否以这种方式向shell返回值,
是否是捕获该值的正确变量

我的机器版本是这个,如果这很重要的话

4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

在bash中,退出代码仅在最低8位可见,402的低8位为146:

>>> 402 & 0b11111111
146

这不是贝壳。系统调用接口仅容纳一个无符号8位数字;因此,可以通信的最大值是255


如果编写一个C程序,其
intmain()
试图
返回(402),也会发生同样的情况
并且您从另一个C程序调用它,使用
exec
,没有任何shell。

您的问题已经有了答案,例如,范围0..255之外的任何值都被处理为模256(退出状态存储在8位值中)。402%256=146
python-c'exit(100)
按预期为我生成100 in
$?
。你问题中的其他“配对”似乎不正确(或者我误解了你的意思)。谢谢你的修复。现在这并不不准确,但仍然模糊地暗示着外壳在其中起着作用;没有。查看我的答案。@tripleee是的,等待*家庭系统调用执行截断。@tripleee事实上,在FreeBSD下,使用
waitid
call,您可以获得完整的32位退出状态。