bash - BASH 条件 if 语句 AND 两个输出真或假的命令
问题描述
在 BASH 中,我有一个这样的 if 语句:
if dokku ps:report $APP_NAME --deployed && ! dokku certs:report $APP_NAME --ssl-enabled; then echo "works"; fi
每个命令输出true
或false
。我希望在then
第一个命令输出true
和第二个输出时执行该子句false
(这就是我有!
. 但是当我运行它时,它会输出:
true
false
如果我单独运行第二个命令:
dokku certs:report $APP_NAME --ssl-enabled
它输出false
. 所以我原来的 if 语句中的否定是行不通的。我在这里做错了什么?
解决方案
这是重现问题的更简单方法:
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 ...
推荐阅读
- json - 尝试使用 Swift 在 Xcode 中使用 POST 请求将 json 格式的数据发送到本地 Web 服务器
- rest - Twilio 流程执行显示多个错误
- html - 打印时最后一页表行粘在页面底部
- python - 我应该如何以一定百分比对列表进行洗牌?
- tensorflow - 运行tflite模型时出现如下错误:input->params.scale != output->params.scale in MAX_POOL_2D Node
- vue.js - 如何在 VS Code 的 .vue 文件中禁用模板中特定行的 eslint 警告
- php - 如何从这个多维数组中只打印一个元素?(我不知道这个数组是如何布局的)
- npm - 使用 node-sass 自定义 Bulma:npm init 入口点混淆
- mysql - 在 bash 脚本中如何使用 cli 参数作为 mysql 查询和捕获结果的变量?
- restfb - RestFB:获取喜欢帖子的用户列表