带有yad窗口并检查Internet连接的bash脚本

时间:2017-01-28 00:36:09

标签: 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)。不幸的是,当我按[退出]按钮或[退出](但我想保留此选项)时,它不会像我喜欢的那样工作。

我应该添加/更改什么?错误在哪里?

1 个答案:

答案 0 :(得分:0)

  

”,当我按下[退出]按钮或[退出]时(无论如何,   选项)”   我想yad不在循环中,这是您的问题。

提示。 -用ping检查连接没有意义。 但是也许您需要,也许这是最好的方法。 最好应该在系统内部找到文件以了解互联网连接状态并使用inotifywait 但是,有时卵化也有问题,因此您应该小心。 -您可以使用yad添加自己的图标托盘, 但是您需要使用yad和其他图标和标题创建两个函数。 当inetrnet状态将更改时,您可以杀死第一个Yad窗口并打开下一个窗口。 测试状态互联网时,可以在“ while”循环中。