переменная bash не сохраняет результат команды

Проблема:

Сохранение результата команды в переменной 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.

0
17.11.2017, 12:57
0 ответов

Теги

Похожие вопросы