4
bash:如何在流程替换中传播错误?
我希望我的Shell脚本每执行一个命令失败就会失败。 通常,我这样做的方法是: set -e set -o pipefail (通常我set -u也添加) 关键是上述方法都不能用于流程替换。这段代码显示“ ok”,并以返回代码= 0退出,但我希望它失败: #!/bin/bash -e set -o pipefail cat <(false) <(echo ok) 除了流程替代之外,还有什么等同于“ pipefail”的东西?还有其他方法可以将命令的输出作为文件传递给命令,但是每当这些程序出现故障时都会引发错误? 穷人的解决方案是检测那些命令是否写入stderr(但在成功的情况下某些命令写入stderr)。 另一个与posix兼容的解决方案将使用命名管道,但是我需要放宽这些命令的使用过程,因为oneliners是由编译后的代码动态构建的,而创建命名管道会使事情复杂化(额外的命令,捕获错误,删除它们,等等)