[英]How can I distinguish the n-th matched pattern of the m-th capture group of a regular expression from earlier or later matches in bash?
[英]Can I stop later parts of a pipeline from running if an earlier part failed?
我有一个管道命令,如:
set -euxo pipefail
echo 'hello' | foo | touch example.sh
这是输出:
$ set -euxo pipefail
$ echo hello
$ foo
$ touch example.sh
pipefail.sh: line 4: foo: command not found
我认为set -e
会导致脚本退出。 但即使foo
无法识别,脚本仍在执行touch
命令。 如果foo
失败,如何让它退出?
你不能真正想到拥有“早期”或“更晚”部分的管道,除非数据从一端移动到另一端: 管道的所有部分同时运行。
因此,如果之前的部件失败,则无法阻止后续部件启动, 因为后部部件在前一部件的同时启动 。
上面说过,有一些机制允许管道在发生故障时提前关闭 - 这些机制以相同的方式工作,而不需要设置任何非默认的shell标志:
touch
不同),它将从标准输入读取 - 因此,如果左侧的组件发生故障,将会看到早期的EOF。 SIGPIPE
。 当然,如果你从一个没有写入stdout的程序或者一个不能从stdin读取的程序进行管道传输,这些机制就无法工作 - 但是这些程序在使用时没有多大意义。管道无论如何。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.