Сохранение результата команды в переменной portcheck
не работает как ожидал.
Мой сценарий содержит этот метод
#!/bin/bash
...
status() {
portcheck=$(nc -z -v -w5 localhost 8443)
echo "*${portcheck}*"
if [[ $portcheck == *refused* ]]; then
echo "Application is stopped"
elif [[ $portcheck == *succeeded* ]]; then
echo "Application is started"
else
echo "state unknown"
fi
}
Когда я запускаю myscript, я получаю следующий результат:
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> **
> state unknown
Но я бы хотел, чтобы результат команды сохранялся в переменной portcheck
, и вывод должен был похоже
> $ ./myscript status
> Connection to localhost 8443 port [tcp/*] succeeded!
> *Connection to localhost 8443 port [tcp/*] succeeded!*
> Application is started
Пробовал несколько вариантов по https://stackoverflow.com/questions/4651437/how-to-set-a-variable-to-the-output-from-a-command-in-bash и другие например
portcheck=`nc -z -v -w5 localhost 8443`
вместо
portcheck=$(nc -z -v -w5 localhost 8443)
Но это не сработало. Что я делаю не так?
Команда
nc -z -v -w5 localhost 8443
проверяет, доступен ли порт для подключения. Он возвращает
Connection to localhost 8443 port [tcp/*] succeeded!
, если порт «открыт», и
nc: connect to localhost port 8443 (tcp) failed: Connection refused
, если порт «закрыт».
Это нормально работает, если я просто выполняю команду в bash.