http://pastebin.com/raw.php?i=rykHdvBh
bix.hu и www.yahoo.com являются тестируемыми сайтами.
127.0.0.1 не удалось проверить связь [firewall удаляет все icmp]
у меня есть "oneliner", который повторяет, если есть "подключение к интернету или нет".
$ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& /dev/null && echo "internet connection ok" || echo "no internet connection"
internet connection ok
$ ping -W 1 -c 2 127.0.0.1 >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& /dev/null && echo "internet connection ok" || echo "no internet connection"
no internet connection
$ ping -W 1 -c 2 127.0.0.1 >& /dev/null && ping -W 1 -c 2 127.0.0.1 >& /dev/null && echo "internet connection ok" || echo "no internet connection"
no internet connection
$ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 127.0.0.1 >& /dev/null && echo "internet connection ok" || echo "no internet connection"
no internet connection
$ ping -W 1 -c 2 bix.hu >& /dev/null && ping -W 1 -c 2 www.yahoo.com >& /dev/null && echo "internet connection ok" || echo "no internet connection"
internet connection ok
$
Хорошо!
Но: если я хочу, чтобы "oneliner" действовал только при наличии подключения к Интернету:
$ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
$ while $TORF; do ping -W 1 -c 1 127.0.0.1 >& /dev/null && ping -W 1 -c 1 www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
$ while $TORF; do ping -W 1 -c 1 127.0.0.1 >& /dev/null && ping -W 1 -c 1 127.0.0.1 >& /dev/null && TORF=false || TORF=true; done
$ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 127.0.0.1 >& /dev/null && TORF=false || TORF=true; done
$ while $TORF; do ping -W 1 -c 1 bix.hu >& /dev/null && ping -W 1 -c 1 www.yahoo.com >& /dev/null && TORF=false || TORF=true; done
$
Это просто не работает.
Цель: если нет подключения к Интернету, то oneliner должен зацикливаться, пока не будет подключение к Интернету. если есть подключение к интернету, oneliner заканчивается.
что мне не хватает?
1 ответ
0
Установка переменной TORF работает в подоболочке и не передается текущей оболочке. Вы можете попробовать что-то без переменной:
while true; do ping -W 1 -c 1 bix.hu >/dev/null && ping -W 1 -c 1 www.yahoo.com >/dev/null && continue; break; done
Чтобы дождаться подключения к Интернету (ответит хотя бы один сайт):
while true; do (ping -W 1 -c 1 bix.hu >/dev/null || ping -W 1 -c 1 www.yahoo.com >/dev/null) && break; done