加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用xargs将stdin分配给变量

发布时间:2020-12-15 21:27:54 所属栏目:安全 来源:网络整理
导读:我真正想做的就是确保管道中的所有内容都成功并将最后一个stdin分配给变量.考虑以下愚蠢的情景: x =`退出1 |猫` 当我运行declare -a时,我看到了这个: 声明-a PIPESTATUS ='([0] =“0”)’ 我需要一些方法来注意退出1,所以我将其转换为: 退出1 | cat | xar
我真正想做的就是确保管道中的所有内容都成功并将最后一个stdin分配给变量.考虑以下愚蠢的情景:

x =`退出1 |猫`

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

声明-a PIPESTATUS ='([0] =“0”)’

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

退出1 | cat | xargs -I {} x = {}

并声明-a给了我:

declare -a PIPESTATUS ='([0] =“1”[1] =“0”[2] =“0”)’

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

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

但它失败了:

xargs:x = {}:没有这样的文件或目录

有没有办法让xargs将{}分配给x?那么让PIPESTATUS工作并将stdin分配给变量的其他方法呢?

注意:这些例子都是愚蠢的.我不是真的在退出1,回显1或猫,但使用这些命令来简化,所以我们可以专注于我的特定问题.

解决方法

当你使用反引号(或首选的$())时,你在子 shell中运行这些命令.你得到的PIPESTATUS是用于赋值而不是子shell中的管道命令.

当你使用xargs时,它对shell一无所知,所以它不能进行变量赋值.

尝试设置-o pipefail然后你可以从$?获取状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读