gpt4 book ai didi

bash - 使用 xargs 将标准输入分配给变量

转载 作者:行者123 更新时间:2023-11-29 09:11:38 24 4
gpt4 key购买 nike

我真正想做的就是确保管道中的一切都成功并将最后一个标准输入分配给一个变量。考虑以下简化的场景:

x=`exit 1|cat`

当我运行 declare -a 时,我看到了这个:

声明 -a PIPESTATUS='([0]="0")'

我需要一些方法来注意到 exit 1,所以我将其转换为:

exit 1|cat|xargs -I {} x={}

declare -a 给了我:

声明 -a PIPESTATUS='([0]="1"[1]="0"[2]="0")'

这就是我想要的,所以我试着看看如果 exit 1 没有发生会发生什么:

echo 1|cat|xargs -I {} x={}

但它失败了:

xargs: x={}: 没有那个文件或目录

有没有办法让 xargs 将 {} 分配给 x?让 PIPESTATUS 工作并将标准输入分配给变量的其他方法怎么样?

注意:这些例子都被简化了。我并没有真正执行 exit 1echo 1cat,而是使用这些命令来简化,以便我们可以专注于我的特定任务问题。

最佳答案

当您使用反引号(或首选的 $())时,您是在子 shell 中运行这些命令。您获得的 PIPESTATUS 用于分配,而不是子 shell 中的管道命令。

当您使用 xargs 时,它对 shell 一无所知,因此无法进行变量赋值。

尝试 set -o pipefail 然后你可以从 $? 获取状态。

关于bash - 使用 xargs 将标准输入分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com