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 ответ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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .