首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bashs关于exit管道exit的命令行为。`exit 1| exit 2`

bashs关于exit管道exit的命令行为。`exit 1| exit 2`
EN

Stack Overflow用户
提问于 2021-09-15 06:57:28
回答 2查看 55关注 0票数 2

我对bash的行为以及输入命令时情况的退出状态感到好奇

exit [exit status] | exit [exit status] | .. [repetition of exit and exit status]

它给出了下面的输出。然后,就不会退出。

这是一种未定义的行为吗?

代码语言:javascript
复制
bash-3.2$ exit 1 | exit 2
bash-3.2$ echo $? 
2
EN

回答 2

Stack Overflow用户

发布于 2021-09-15 07:03:20

bash man page

流水线中的每个命令都作为单独的进程执行(即,在子subshell中)。

因此,即使是第一个exit也不会退出您的shell,因为它只退出了子shell。

至于退出代码:

管道的返回状态是最后一个命令的退出状态,除非启用了

选项。如果启用了pipefail,则管道的返回状态是以非零状态退出的最后一个(最右侧)命令的值,如果所有命令都成功退出,则返回状态为零。

您可以像这样激活pipefail

代码语言:javascript
复制
$ set -o pipefail
$ exit 1 | exit 2 | exit 0
$ echo $?
2
票数 0
EN

Stack Overflow用户

发布于 2021-09-15 07:26:45

exit 1 | exit 2不是顺序的,而是并发的。

即使最后一个命令采用来自第一个命令的STDOUT输出。What is a simple explanation for how pipes work in Bash?

此外,这些命令中的每一个都在一个子subshell中执行。因此,您键入命令的主shell不会退出。

管道命令就像是整个命令的组合,而不是一个接一个的命令。

如果您想退出,可以将其设置为顺序exit 1 || exit 2

最后,默认情况下,$?是最新的前台管道退出状态。What are the special dollar sign shell variables?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69188389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档