Ах да. Когда вы запускаете и останавливаете экран
, он сбрасывает отображение экрана, очищая его в процессе. Самый простой способ убедиться, что вы видите ошибки, сгенерированные вашей командой ruby
, - это отделить их от команды screen
, чтобы одна больше не зависела от другой:
screen -S server
ruby start.rb true 3001
...
exit
Вы, вероятно, уже знаете, что Ctrl A d отключает экран, а позже вы можете повторно подключить этот именованный сеанс с помощью screen -r server
.
Ошибки, которые могут быть сгенерированы командой ruby
, останутся доступными для изучения. Даже если команда завершит работу screen, сеанс
останется запущенным, поэтому важно не забыть повторно подключиться и выйти
, когда вы закончите.
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"
, если вы хотите заключать в кавычки переменную в выводе.
См.:
Как вы упомянули в вопросе 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