Я запускаю сценарий, который зависит от сети и подключения к сети. Скрипт запускается при входе в систему (что происходит автоматически после загрузки). Проблема в том, что к моменту запуска скрипта у меня обычно еще нет IP-адреса (DHCP). Сейчас я просто сплю сценарий на 15 секунд, но мне этот подход не нравится, так как я хочу быть в состоянии сообщить пользователю, если что-то не так.
Мой план заключается в том, чтобы выполнить цикл, пока у меня еще нет IP-адреса, и продолжить, когда у меня есть. Важно отметить, что через какое-то время это должно произойти. Что я придумал, так это if [ ifconfig | grep "192.168.100" ];
то, что происходит, когда grep потребляет ];
и ему не нравится. Тогда bash также расстраивается, потому что не может найти, ];
какой grep съел. А потом я даже не реализовал тайм-аут.
Кто-то предложил сохранить переменную и, скажем, спать в течение секунды в каждой итерации и увеличивать эту переменную каждый раз. Вот мой полный (не рабочий) скрипт (я довольно новичок в скриптах bash):
x=0
while [ ifconfig | grep "192.168.100." > /dev/null ]; do
echo "no nework"
if "$x" -gt 200; then
#Time out here
exit 1
x=$((x+1))
sleep .1
fi
done
#continue with rest of script...
Любые указатели в правильном направлении будут с благодарностью!
grep
вывод на /dev/null
. -q
Вместо этого используйте опцию. Кроме того, я не собираюсь гадать, если хорошая идея - ifconfig. Почему бы не использовать ping
вместо этого?
ping
может произойти сбой в зависимости от рассматриваемой сети. Лучше просто проверить работающую конфигурацию системы.
network-online.target
...