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然后你可以从$?获取状态. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |