所以这应该很简单。我正在尝试测试脚本顶部的条件并在条件失败时退出整个脚本,并且我有两个语句要在退出时执行。有一个单独的exit没有第二个语句,这很好,但是无论我如何添加第二个语句,我都无法让它完全退出。隐含的装饰规则是这一切都必须在一行上。当对脚本的这种单行更改没有按预期工作时,我发现了这一点。剧本一直在进行。
首先让我展示一下什么是有效的。如果 $USER 变量不是“x”,则以下行完全退出,这很好。我知道这是有效的,因为在终端窗口中输入这一行将关闭该终端窗口(除非您的用户 ID 确实是“x”),因此它实际上是在执行顶级退出:
[ $USER = 'x' ] || exit 1
Run Code Online (Sandbox Code Playgroud)
所以这很好,就像我想要的那样,除了我想在退出之前回显一条消息;但是,如果我尝试添加回声,则退出不再发生,或者它似乎以“不同的方式”发生,例如可能在 bash 函数上下文或其他内容中。下一行不会关闭您的终端,这很糟糕。
[ $USER = 'x' ] || (echo "Time to bail" ; exit 1)
Run Code Online (Sandbox Code Playgroud)
我想也许分号被回声吃掉了,但不,出口似乎被击中了。我怎么知道?我更改了上面的代码,然后回显了 $? 我看到了我在上面看到“1”的地方放的任何值。当然,我是在我想关闭的终端窗口中查看这些值,但它并没有关闭。
下一个变体还显示了执行 echo 和第二个语句的第二种方法,但在使用 exit 时会再次发生完全相同的行为:
[ $USER = 'x' ] || (echo "Time to bail" && exit 1)
Run Code Online (Sandbox Code Playgroud)
我希望这里有人能让这一切不仅不奇怪而且看起来很合理。
那么这不可能在一条线上完成吗?
( bash --version: GNU bash, version 4.3.30(1)-release)