在我的终端中,它打印出一个看似随机的数字127
。我认为它正在打印一些变量的值并检查我的怀疑,我定义了一个新变量v=4
。echo $?
再次运行给了我0
作为输出。
我很困惑,因为我期待 4 是答案。
我只是忘了使用sudo
:
usr@arch ~[0] $ iptables -L
iptables v1.4.21: can't initialize iptables table `filter': Permission
denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
usr@arch ~[3] $ <---
Run Code Online (Sandbox Code Playgroud)
我的bash
PS1提示符回显了最后一个命令退出状态 ($?)。该iptables
手册页并不是指3返回代码:
各种错误消息被打印为标准错误。退出代码为 0 以确保正常运行。似乎是由无效或滥用命令行参数引起的错误导致退出代码为 2,其他错误导致退出代码为 1。
该SUSv3 / POSIX讨论的命令退出状态。1诸如mount
- 对于错误条件有 7 种不同的退出状态 - 在没有特权的情况下执行的命令返回 1;其联机帮助页中记录的内容:不正确的调用或权限。
问:
那么,为什么iptables
和mount
在这方面有所不同-它是纯粹的专用?为什么strace
在前一个输出上执行以下操作:socket(PF_INET, SOCK_RAW, IPPROTO_RAW) = …
我想知道我们可以使用哪些不会被 ex 误认为的返回值。信号?
前任。:
$sleep 10
$#hit ctrl+c
$echo $?
130
Run Code Online (Sandbox Code Playgroud)
所以我知道我不能使用类似return 130
或exit 130
所以这会产生误导:
$function FUNC(){ return 130; };FUNC;echo $?
130
Run Code Online (Sandbox Code Playgroud) exit-status ×3
shell ×2
bash ×1
command-line ×1
exit ×1
function ×1
iptables ×1
linux ×1
posix ×1