Bash(单行):如果第一次成功则执行第二条命令,如果不成功则执行第三条?

rld*_*ld. 8 command-line bash

我想通过 SSH 一个接一个地执行两个命令。我没有交互式外壳。第二个命令应该只在第一个命令成功时执行,但该行在脚本中,所以如果第二个命令无法以这种方式执行,我想要一些用户友好的反馈。在那之后,脚本的其余部分应该继续执行,所以exit这里不是一个选项。

我知道我可以使用布尔运算符&&,例如foo && bar防止barfoo失败时执行,并且仅在失败时bar || baz执行。但是,我对这些如何相互配合感到有些困惑。bazbar

把它们加起来:

(通过 SSH 执行,无需交互式 shell)

  1. 执行 foo
  2. bar仅在foo成功时执行
  3. 执行baz仅当foo出现故障并防止执行bar

ssh user@host "foo && bar || baz"

这是做我刚刚描述的事情的正确方法吗?

jor*_*anm 14

使用您的示例foo && bar || baz将执行bazifbar foofailed。根据您的描述,这不是您想要的。您可以使用以下if语句来实现您的目标:

if foo; then
    bar
else
    baz
fi
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望在一行中使用它:

if foo; then bar; else baz; fi
Run Code Online (Sandbox Code Playgroud)