c - 为什么我很困惑 "the exit status code is 0 when a command fails in BASH"

标签 c bash

注意:这个问题的提问方式不对。原因是条件行中的 ! if ! ( commad) 是命令的部分,因此,它更改了 $?。所以,当我检查 $? command 的退出状态时,我错了。接受的答案详细解释了这一点。

根据我的编码经验,程序成功时返回/退出 0,失败时返回/退出其他值。例如,在 C 中,我们使用 exit 0 表示成功终止。但是当我写一个 bash 脚本来判断一个命令是否成功时,我发现很奇怪 0 现在意味着发生了一些错误并且命令失败了。例如,

if ! (make $1); then
   exit 1
fi

问题为什么在BASH中执行命令失败时退出状态码为0?

最佳答案

这个问题中的说法是错误的; bash 不使用 0 来表示失败的退出。

$ make bad; echo $?
make: *** No rule to make target `bad'.  Stop.
2
$ scp badhost:/something .; echo $?
ssh: Could not resolve hostname badhost: nodename nor servname provided, or not known
1

当然,使用 ! 来反转失败和成功将使 $? 在失败后变为 0 —— 但这是明确且有意的行为。

$ ! make bad; echo $?
make: *** No rule to make target `bad'.  Stop.
0
$ ! scp badhost:/something .; echo $?
ssh: Could not resolve hostname badhost: nodename nor servname provided, or not known
0

关于c - 为什么我很困惑 "the exit status code is 0 when a command fails in BASH",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664453/

相关文章:

linux - 如何从 pem 或 crt 文件中的链中删除 SHA1 证书

c - 对于循环来说这意味着什么?

c++ - 编译器 Baremetal (arm-none-eabi) - 编译器实现

python - 如何 git 安装而不是 pip 安装?

php - 在最后一个完成之前不要运行 cron php 任务

linux - 如何多次提取带有 or 条件的 HTML 标记之间的文本

C - 这个函数指针声明是什么意思?

c - *(arr+i)[1] 和 **(arr+i) 表示的元素是如何确定的?

c - EN4B指令的使用

java - 用于运行最新版本文件的 Bash 脚本?