unix shell,使用管道子进程获取退出代码
假设我在 unix shell 中执行此操作,
$ some-script.sh | grep mytext
$ echo $?
这将为我提供 grep
的退出代码
,但是如何获得 some-script.sh
的退出代码
编辑
假设管道操作是不可变的。即,我无法将其分开并单独运行这两个命令
Let's say I do this in a unix shell
$ some-script.sh | grep mytext
$ echo $?
this will give me the exit code of grep
but how can I get the exit code of some-script.sh
EDIT
Assume that the pipe operation is immutable. ie, I can not break it apart and run the two commands seperately
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
有多种解决方案,这取决于您具体想要做什么。
最简单且易于理解的方法是将输出发送到文件,然后在保存退出代码后对其进行 grep :
There are multiple solutions, it depends on what you want to do exactly.
The easiest and understandable way would be to send the output to a file, then grep for it after saving the exit code:
comp.unix.shell 常见问题解答 (#13) 解释了如何在 Bourne shell 中使用管道来帮助完成您想要的任务:
A trick from the comp.unix.shell FAQ (#13) explains how using the pipeline in the Bourne shell should help accomplish what you want:
如果您使用的是 bash:
If you're using bash:
有一个名为
mispipe
的实用程序,它是 moreutils 包的一部分。它正是这样做的:
mispipe some-script.sh 'grep mytext'
There is a utility named
mispipe
which is part of the moreutils package.It does exactly that:
mispipe some-script.sh 'grep mytext'
第一种方法,将退出状态临时保存在某个文件中。这导致您必须使用大括号创建子 shell:
上面 Randy 提出的另一种方法,更简单的代码实现:
它的全部。两者都可以在 bash 下工作(我知道,bashizm)。祝你好运 :)
这两种方法都不将临时管道保存到物理文件,仅保存退出代码。
First approach, temporarly save exit status in some file. This cause you must create subshell using braces:
another approach presented by Randy above, simplier code implementation:
its all. both works under bash (i know, bashizm). good luck :)
both approaches does not save temporarly pipe to physical file, only exit code.