Удаленная команда для переменной bash, за которой следует оператор if, но вывод читается неправильно? - PullRequest
0 голосов
/ 10 октября 2019

Я не знаю, возможно ли это вообще, но я запускаю команду, чтобы проверить, есть ли серверы на узле. Это используется в качестве меры безопасности, поэтому сценарий, который я пишу, не запускает аппаратные узлы, которые фактически используются. Однако я не получаю желаемого результата.

Я использую следующий скрипт:

#!/bin/bash
checkempty=$(ssh root@$HWNODEIP "vzlist -o veid")

if [ "$checkempty" == "Container(s) not found" ]; then
  echo "Hardware node is empty! Proceeding with kickstart"
  else
  echo "Found VPS? Please investigate. Quitting kickstart"
fi

Результат при выполнении команды

Container(s) not found
Found VPS? Please investigate. Quitting kickstart

Очевидно, что это неверно. На выбранном аппаратном узле нет серверов.

Ожидаемый результат при выполнении команды

Container(s) not found
Hardware node is empty! Proceeding with kickstart

Что я делаю не так? Я пытался избежать этих скобок символов. Я также пытался использовать backticks. Но пока не повезло. Я даже пытался использовать подстановочный знак в сочетании с «not found», но тоже не ходил.

Возможно, это что-то маленькое, что я пропускаю.

1 Ответ

4 голосов
/ 10 октября 2019

В bash VAR=$( cmd ) назначает стандартный выход (STDOUT) от cmd до VAR. Возможно, что vzlist напечатает свою ошибку на STDERR, а STDOUT будет пустым.

Попробуйте вместо этого checkempty=$(ssh root@$HWNODEIP "vzlist -o veid" 2>&1). 2>&1 перенаправляет STDERR в STDOUT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...