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

Ах да. Когда вы запускаете и останавливаете экран , он сбрасывает отображение экрана, очищая его в процессе. Самый простой способ убедиться, что вы видите ошибки, сгенерированные вашей командой ruby ​​, - это отделить их от команды screen , чтобы одна больше не зависела от другой:

screen -S server
ruby start.rb true 3001
...
exit

Вы, вероятно, уже знаете, что Ctrl A d отключает экран, а позже вы можете повторно подключить этот именованный сеанс с помощью screen -r server .

Ошибки, которые могут быть сгенерированы командой ruby ​​, останутся доступными для изучения. Даже если команда завершит работу screen, сеанс останется запущенным, поэтому важно не забыть повторно подключиться и выйти , когда вы закончите.

4
16.08.2018, 22:17
2 ответа
if [[ `ping -c $count "$HNAME"` ]]

Это запускается pingв подстановке команд (с использованием старого синтаксиса обратной кавычки вместо более разумного$(...)). Результирующий вывод помещается в командную строку, а затем [[.. ]]проверяет, является ли вывод пустым. (То есть обычный вывод. Подстановка команд не захватывает вывод ошибок, который все равно будет отправлен в вывод ошибок скрипта.)

Если pingвыводит что-либо, тест завершается успешно. Например. в моей системе:

$ ping -c1 1.2.3.4 2>/dev/null
PING 1.2.3.4 (1.2.3.4) 56(84) bytes of data.

--- 1.2.3.4 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

Поскольку 1.2.3.4является действительным IP-адресом, pingпытается связаться с ним. С недопустимым IP-адресом или несуществующим именем хоста будет напечатана только ошибка, а стандартный вывод будет пустым.

Лучший способ проверить работоспособность хоста — проверить состояние выхода pingи перенаправить его вывод:

host=1.2.3.4
if ping -c1 "$host" >/dev/null 2>&1; then
    echo "'$host' is up"
else
    echo "'$host' does not respond (or invalid IP address/hostname)"
fi

Обратите внимание, что кавычки в командах echoотключены:

echo ""$HNAME" seems to be down."

Это пустая строка в кавычках "", затем расширение параметра без кавычек $HNAME, а затем строка в кавычках " seems to be down.". По разным причинам лучше заключать в кавычки все раскрытия параметров, поэтому используйте "$var blahblah"или "\"$var\" blahblah", если вы хотите заключать в кавычки переменную в выводе.

См.:

10
27.01.2020, 20:46

Как вы упомянули в вопросе even with nonexistent ip. Если вы пингуете IPвместо домена. Вы должны попробовать следующий подход, чтобы получить желаемый результат.

HNAME=192.168.1.21 
count=2 # Send only two pings.
if ping -c $count "$HNAME" 2> /dev/null
then
    echo "\"$HNAME\" still up and broadcasting spam your way."
else
    echo "\"$HNAME\" seems to be down. Pity."
fi
3
27.01.2020, 20:46

Теги

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