BASH условный оператор if ANDing две команды, которые выводят true или false - PullRequest
0 голосов
/ 07 марта 2020

В 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 не работает. Что я тут не так делаю?

1 Ответ

2 голосов
/ 07 марта 2020

Вот более простой способ воспроизвести вашу проблему:

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

Это потому, что вывод команды не имеет значения. if, && и || все смотрят на код выхода команды . Они не пытаются интерпретировать текст Engli sh.

Вместо этого вы можете использовать сравнение строк:

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