为什么下面打印0?我预计它会打印 1234。
$ bash -c exit 1234
$ echo $?
答案1
bash -c exit 1234
使用单独的参数-c
、exit
和运行 bash 1234
。-c
消耗紧随其后的参数,因此 bashexit
仅运行;1234
用作第一个位置参数($0
shell 的名称)。
要让 bash 以给定代码退出,您需要引用整个命令:
bash -c "exit 1234"
请注意,bash 退出状态限制为 0-255,因此这会产生 210 (1234 % 256) 的退出状态。
答案2
即使您将代码修复为运行而不是单独运行,也不能使用bash
's内置函数,因为它会自行将值截断为 8 位:exit
exit 1234
exit
bash
$ 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()
有关详细信息,请访问: