k314159 Asked: 2022-10-11 00:35:02 +0800 CST2022-10-11 00:35:02 +0800 CST 2022-10-11 00:35:02 +0800 CST 如何让 Bash 使用给定的退出代码退出 772 为什么下面会打印 0?我预计它会打印 1234。 $ bash -c exit 1234 $ echo $? bash 2 个回答 Voted Best Answer Stephen Kitt 2022-10-11T00:38:32+08:002022-10-11T00:38:32+08:00 bash -c exit 1234 -c使用单独的参数、exit和1234运行bash -c使用紧随其后的参数,因此 bashexit只运行;1234用作第一个位置参数($0,外壳的名称)。 要让 bash 使用给定的代码退出,您需要引用整个命令: bash -c "exit 1234" 请注意,bash 退出状态限制为 0-255,因此这会产生 210 (1234 % 256) 的退出状态。 Stéphane Chazelas 2022-10-11T01:02:05+08:002022-10-11T01:02:05+08:00 即使您将代码修复为运行而不是单独运行,您也不能使用bash's builtin,因为它会自行将值截断为 8 位:exitexit 1234exitbash $ strace -e exit_group bash -c 'exit 1234' exit_group(210) = ? 您需要在同一进程中执行另一个可以以任意值退出的命令: $ strace -e exit_group bash -c 'exec perl -e "exit 1234"' exit_group(1234) = ? $ strace -e exit_group bash -c 'exec zsh -c "exit 1234"' exit_group(1234) = ? 在任何情况下,请注意,某些系统(如 Linux)不允许父进程访问该退出状态的完整值,即使使用API 或POSIX 要求不截断它waitid()的 SIGCHLD处理程序也是如此。sigaction() 更多详情请访问: Linux中退出代码的最小值和最大值是多少? 进程终止时的默认退出代码?
-c
使用单独的参数、exit
和1234
运行bash-c
使用紧随其后的参数,因此 bashexit
只运行;1234
用作第一个位置参数($0
,外壳的名称)。要让 bash 使用给定的代码退出,您需要引用整个命令:
请注意,bash 退出状态限制为 0-255,因此这会产生 210 (1234 % 256) 的退出状态。
即使您将代码修复为运行而不是单独运行,您也不能使用
bash
's builtin,因为它会自行将值截断为 8 位:exit
exit 1234
exit
bash
您需要在同一进程中执行另一个可以以任意值退出的命令:
在任何情况下,请注意,某些系统(如 Linux)不允许父进程访问该退出状态的完整值,即使使用API 或POSIX 要求不截断它
waitid()
的 SIGCHLD处理程序也是如此。sigaction()
更多详情请访问: