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
echo a&>/dev/null&&echo b | | |(echo c;退出1);回声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
而不是&&&&| |
——它可以正确地处理分组而不会带来额外的麻烦,并且没有不明显的执行路径。与&&&| |
不同,它只起作用