我真正想做的就是确保管道中的所有内容都成功并将最后一个标准输入分配给变量。考虑以下简化的场景:
x=`exit 1|cat`
当我跑步时declare -a
,我看到这个:
declare -a PIPESTATUS='([0]="0")'
我需要一些方法来注意到exit 1
,所以我将其转换为:
exit 1|cat|xargs -I {} x={}
And declare -a
给我:
declare -a PIPESTATUS='([0]="1" [1]="0" [2]="0")'
这就是我想要的,所以我尝试看看如果exit 1
没有发生:
echo 1|cat|xargs -I {} x={}
但它失败了:
xargs: x={}: No such file or directory
有没有办法让 xargs 分配{}
to x
?还有其他方法可以实现吗PIPESTATUS
工作并将标准输入分配给变量?
注意:这些例子是简化的。我并不是真的在做exit 1
, echo 1
or a cat
,但使用这些命令进行简化,以便我们可以专注于我的特定问题。
当您使用反引号(或首选$()
)您正在子 shell 中运行这些命令。这PIPESTATUS
您得到的是分配的内容,而不是子 shell 中的管道命令。
当你使用xargs
,它对 shell 一无所知,因此无法进行变量赋值。
Try set -o pipefail
然后你可以从以下位置获取状态$?
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)