如何在bash中为输入重定向传播非零出口代码?

如何在bash中为输入重定向传播非零出口代码?,bash,redirect,exit-code,Bash,Redirect,Exit Code,我知道set-o pipefail用于传播管道的出口代码。但是,我想为输入重定向做一些类似的事情。具体来说,我希望这样做: $ cat <(echo abc; exit 1) abc $ echo $? 1 当前行为是最后一行是“0”,而不是“1” 我如何做到这一点?不,我不能用烟斗。我给出的示例只是一个简化的测试用例。实际上,我从多个来源获取输入。恐怕输入重定向无法做到这一点。也许让提供输入的进程将其退出状态写入一个文件,然后再检查?我在这里举了一个例子,使用@Lars建议的临时文件

我知道set-o pipefail用于传播管道的出口代码。但是,我想为输入重定向做一些类似的事情。具体来说,我希望这样做:

$ cat <(echo abc; exit 1) 
abc
$ echo $?
1
当前行为是最后一行是“0”,而不是“1”


我如何做到这一点?不,我不能用烟斗。我给出的示例只是一个简化的测试用例。实际上,我从多个来源获取输入。

恐怕输入重定向无法做到这一点。也许让提供输入的进程将其退出状态写入一个文件,然后再检查?

我在这里举了一个例子,使用@Lars建议的临时文件:


返回代码将是“success”zero iff sort,两个zcat都成功。

管道和进程重定向之间的一个重大区别是管道本质上是线性的。通过进程重定向,您可以并行地拥有多个子shell。由于示例代码不起作用,您可以提供更多详细信息吗?所有进程都必须在其中一个出现故障时立即停止,或者在事后检测到错误就足够了吗?只要退出代码不为零,使用哪个退出代码重要吗?如果您从多个来源获取输入,一个更复杂但希望最小的示例将非常有用。
tmp=`mktemp`; sort -mk1 <(zcat 1.gz || rm -f $tmp) <(zcat 2.gz || rm -f $tmp) && rm $tmp