Скрипт bash с окном yad и проверкой интернет-соединения
Я работаю над сценарием bash, открываю окно yad и держу его открытым до тех пор, пока не появится интернет-соединение, а затем закрываю его.
Это выглядит следующим образом:
#!/bin/bash
yad_wind1_id=""
yad_wind1_id_txt_str=""
NET_STATE=0
function test_net_connection()
{
(ping -c 1 www.google.com &>/dev/null)
XCODE=$?
if [ $XCODE == 0 ]; then
NET_STATE=1
else
NET_STATE=0
fi
}
function kill_yad_proc()
{
kill_proc=$(ps aux | grep "$1" | grep -v "grep $1" | \
awk '{print $2}' | sed 's:^:kill :')
eval $kill_proc
}
function yad_proc_id_string()
{
yad_win_id=`echo $(date +%F-%H-%M-%6N) | \
sed 's/-/_/g' | sed 's/^/text=/'`
yad_win_id_txt_str="--""$yad_win_id"
}
yad_proc_id_string
# ...and here starts my problem...
while [[ $NET_STATE == 0 ]]; do
test_net_connection
if [[ $XCODE == 0 ]]; then
NET_STATE=1
kill_yad_proc "$yad_win_id"
break
exit
else
NET_STATE=0
continue
fi
done | `yad --fixed --skip-taskbar --undecorated \
"$yad_win_id_txt_str" \
--text="Waiting for internet connection..." \
--button='Quit:bash -c "kill -USR1 $YAD_PID"' \
--image=disconnected.png`
В этой версии скрипт работает только частично: когда интернет отключен, окно yad появляется и исчезает, когда интернет включен (ping возвращает 0). К сожалению, когда я нажимаю кнопку [Quit] или [escape] (однако я бы хотел сохранить эту опцию), она не работает так, как мне бы хотелось.
Что я должен добавить / изменить? Где ошибка сделана?
0 ответов
"когда я нажимаю кнопку [Quit] или [escape] (однако я бы хотел оставить эту опцию)", я думаю, yad находится вне цикла, и это ваша проблема.
СОВЕТ. - Не вижу смысла проверять связь с пингом. Но, может быть, вам нужно, и, возможно, это лучший способ. Лучше всего найти файл внутри системы для определения состояния соединения с Интернетом и использовать inotifywait, однако иногда inotify также содержит ошибки, поэтому вам следует быть осторожным. - Вы можете добавить собственный значок трея с YAD, но вам нужно создать две функции с YAD с другими иконками и заголовком. Когда изменится статус inetrnet, вы можете убить первое окно и открыть следующее окно. Это может быть в цикле "время", когда проверяется состояние Интернета.