bash pipestatus在backticked命令?

前端之家收集整理的这篇文章主要介绍了bash pipestatus在backticked命令?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在bash中,如果我在反引号内执行一些管道命令,我怎样才能找到第一个命令的退出状态?

即在这种情况下,我试图获得“1”.如果我不使用反引号,我可以通过PIPESTATUS [0]获得,但是当我想保存输出时它似乎不起作用:

  1. ## PIPESTATUS[0] works to give me the exit status of 'false':
  2. $false | true;
  3. $echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]};
  4. 0 1 0
  5.  
  6. ## doesn't work:
  7. $a=`false | true`;
  8. $echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]};
  9. 0 0

更一般地说,我试图完成:将某个程序的输出的最后一行保存到变量,但能够判断程序是否失败:

  1. $myvar=` ./someprogram | tail -1 `;
  2. $if [ "what do i put here" ]; then echo "program Failed!"; fi

理想情况下,我也想了解发生了什么,而不仅仅是答案是什么.

谢谢.

尝试设置pipefail选项.它返回失败的管道的最后一个命令.一个例子:

首先我禁用它:

  1. set +o pipefail

创建一个perl脚本(script.pl)来测试管道:

  1. #!/usr/bin/env perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. if ( @ARGV ) {
  7. die "Line1\nLine2\nLine3\n";
  8. }
  9. else {
  10. print "Line1\nLine2\nLine3\n";
  11. }

在命令行中运行:

  1. myvar=`perl script.pl | tail -1`
  2. echo $? "$myvar"

产量:

  1. 0 Line3

看起来是正确的,让我们看看启用了pipefail:

  1. set -o pipefail

并运行命令:

  1. myvar=`perl script.pl fail 2>&1 | tail -1`
  2. echo $? "$myvar"

产量:

  1. 255 Line3

猜你在找的Bash相关文章