1
172
在里面
你可以用
注意
|
2
51
类似这样的命令在命令后运行:
将允许您检查管道中的所有命令是否成功。 |
3
22
如果您确实不希望第二个命令在第一个命令成功之前继续执行,那么您可能需要使用临时文件。简单的版本是:
"1"及&2“重定向也可以缩写”>&2'; 然而,MKS外壳的旧版本在没有前面的“1”的情况下错误地处理了错误重定向,因此我多年来一直使用这种明确的可靠性表示法。 如果您中断了某些内容,则会泄漏文件。防爆(或多或少)外壳编程使用:
第一行陷阱是“运行命令”
在原始管道中,“c”在“a”完成之前从“b”读取数据是可行的——这通常是可取的(例如,它提供了多个核的工作)。如果“b”是一个“排序”阶段,那么这将不适用-“b”必须先查看其所有输入,然后才能生成任何输出。 如果要检测哪些命令失败,可以使用:
这是简单和对称的-扩展到4部分或N部分管道很简单。 简单的“set-e”实验没有帮助。 |
4
9
不幸的是,Johnathan的答案需要临时文件,Michel和Imron的答案需要bash(尽管这个问题被标记为shell)。正如其他人已经指出的,在以后的进程开始之前,不可能中止管道。所有进程都是一次启动的,因此在传递任何错误之前,所有进程都将运行。但问题的标题也是关于错误代码的问题。管道完工后,可以检索和调查这些数据,以确定是否有任何相关过程失败。 下面是一个解决方案,它捕获管道中的所有错误,而不仅仅是最后一个组件的错误。这就像bash的pipefail,只是在您可以检索的意义上更强大 全部的 错误代码。
为了检测是否有任何故障,需要一个
为了更多地使用这个构造,并让自己相信它确实做到了它应该做的事情,我替换了
|
5
1
这个答案符合公认答案的精神,但使用shell变量而不是临时文件。
|
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
g00dds · 如何在bash中从文件中的每一行解码base64? 2 年前 |
Paul · Bash wait命令忽略指定的进程ID 2 年前 |
RafaÅ G. · 如何使用从文件读取的多行参数运行ssh? 2 年前 |
Priya · 在shell脚本中多次运行python脚本 2 年前 |