首页 > 解决方案 > BASH 条件 if 语句 AND 两个输出真或假的命令

问题描述

在 BASH 中,我有一个这样的 if 语句:

if dokku ps:report $APP_NAME --deployed && ! dokku certs:report $APP_NAME --ssl-enabled; then echo "works"; fi

每个命令输出truefalse。我希望在then第一个命令输出true和第二个输出时执行该子句false(这就是我有!. 但是当我运行它时,它会输出:

true
false

如果我单独运行第二个命令:

dokku certs:report $APP_NAME --ssl-enabled

它输出false. 所以我原来的 if 语句中的否定是行不通的。我在这里做错了什么?

标签: bashif-statement

解决方案


这是重现问题的更简单方法:

if echo false
then
  echo "Why does this print?"
fi

这是因为命令输出无关紧要。if&&||看命令的退出码。他们不会尝试解释英文文本。

您可以改为使用字符串比较:

if [ "$(dokku ps:report $APP_NAME --deployed)" = "true" ] && [ "$(dokku certs:report $APP_NAME --ssl-enabled)" = "false" ]
then ...

推荐阅读