Скрипт 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, вы можете убить первое окно и открыть следующее окно. Это может быть в цикле "время", когда проверяется состояние Интернета.

Другие вопросы по тегам