Linux 如何在使用&;时执行exit命令&;和| | |?

Linux 如何在使用&;时执行exit命令&;和| | |?,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我有两种情况 echo a&>/dev/null&&echo b | | |(echo c;退出1);回声d;回声e;回声f 输出: b d e f echo a&>/dev/null&&echo b | | |(echo c;退出1);回声d;回声e;回声f 输出: c d e f 我需要脚本在exit命令后退出,而不是执行其他命令。我该怎么做?exit最终将退出子shell((…)),而不是调用它的脚本 看 但是,echo b退出时状态为0,因此|之后的任何内容都不会执行。()中的命令在子s

我有两种情况

  • echo a&>/dev/null&&echo b | | |(echo c;退出1);回声d;回声e;回声f
  • 输出:

    b

    d

    e

    f

  • echo a&>/dev/null&&echo b | | |(echo c;退出1);回声d;回声e;回声f
  • 输出:

    c

    d

    e

    f


    我需要脚本在exit命令后退出,而不是执行其他命令。我该怎么做?

    exit
    最终将退出子shell(
    (…)
    ),而不是调用它的脚本

    但是,
    echo b
    退出时状态为0,因此
    |
    之后的任何内容都不会执行。
    ()
    中的命令在子shell中执行,因此
    exit
    在parens内部只退出子shell,而不是主shell。您可以使用
    {}
    而不是paren对命令进行分组,而无需强制使用子shell。注意:与parens不同,在
    {
    后面需要一个空格,在
    }
    前面需要一个分号(或符号)

    $ eco a &>/dev/null && echo b || { echo c ; exit 1; } ; echo d ;echo e;echo f output
    c
    logout
    
    另外,您应该知道使用
    &&||
    与if-then-else fi结构不同;特别是,如果
    &
    |
    之间的命令(对应于
    if
    语句中的
    then
    子句)碰巧失败,它也将执行
    |
    之后的命令。只要有
    echob
    ,它就不太可能(但技术上可能)失败;如果它更复杂,你会得到意想不到的结果

    因此,我建议使用
    if-then-else fi
    而不是
    &&&&| |
    ——它可以正确地处理分组而不会带来额外的麻烦,并且没有不明显的执行路径。与
    &&&| |
    不同,它只起作用