bash AND-list不起作用

时间:2015-08-11 07:32:22

标签: bash list function

我的导出功能如下:

foo()
{
   ( set -e; false; echo foo is running; )
}

在以下命令

foo && do_other_stuff
打印了“foo正在运行”并且do_other_stuff意外执行。 作为比较,命令

foo; echo $?

正常执行。

我的bash版本是4.3.33。所以这是一个错误?

1 个答案:

答案 0 :(得分:0)

好的,我理解你问题的后半部分。

foo() { ( set -e; false; echo foo is running; ) }
foo; echo $? # just print 1
foo && echo bar # shows "foo is running" and "bar"

来自man

  

如果失败的命令是紧跟在 while 直到关键字之后的命令列表的一部分,则shell不会退出,之后的部分测试if elif 保留字,是&& ││列表中执行的任何命令的一部分,但以下命令除外最后的&& ││,管道中的任何命令,但是最后一个命令,或者命令的返回值是否被反转!

这确实很难理解:^)

由于foo之后是&&,我知道shell不会立即退出。

做的时候:

foo() { ( set -e; false; echo foo is running; ); false; }

foo && echo bar # will only print "foo is running"

因为没有执行“set -e”。

我想你想做:

foo() {
    ( # facultative
        return 1; # abort here with a non-zero status
        echo foo is running
    ) # ...
}
foo && echo bar; echo $? # print "1"