bash pipestatus在backticked命令?
发布时间:2020-12-15 18:57:55 所属栏目:安全 来源:网络整理
导读:在bash中,如果我在反引号内执行一些管道命令,我怎样才能找到第一个命令的退出状态? 即在这种情况下,我试图获得“1”.如果我不使用反引号,我可以通过PIPESTATUS [0]获得,但是当我想保存输出时它似乎不起作用: ## PIPESTATUS[0] works to give me the exit s
在bash中,如果我在反引号内执行一些管道命令,我怎样才能找到第一个命令的退出状态?
即在这种情况下,我试图获得“1”.如果我不使用反引号,我可以通过PIPESTATUS [0]获得,但是当我想保存输出时它似乎不起作用: ## PIPESTATUS[0] works to give me the exit status of 'false': $false | true; $echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]}; 0 1 0 ## doesn't work: $a=`false | true`; $echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]}; 0 0 更一般地说,我试图完成:将某个程序的输出的最后一行保存到变量,但能够判断程序是否失败: $myvar=` ./someprogram | tail -1 `; $if [ "what do i put here" ]; then echo "program failed!"; fi 理想情况下,我也想了解发生了什么,而不仅仅是答案是什么. 谢谢.
尝试设置pipefail选项.它返回失败的管道的最后一个命令.一个例子:
首先我禁用它: set +o pipefail 创建一个perl脚本(script.pl)来测试管道: #!/usr/bin/env perl use warnings; use strict; if ( @ARGV ) { die "Line1nLine2nLine3n"; } else { print "Line1nLine2nLine3n"; } 在命令行中运行: myvar=`perl script.pl | tail -1` echo $? "$myvar" 产量: 0 Line3 看起来是正确的,让我们看看启用了pipefail: set -o pipefail 并运行命令: myvar=`perl script.pl fail 2>&1 | tail -1` echo $? "$myvar" 产量: 255 Line3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |