0

我正在编写一个 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](但我想保留此选项)时,它并没有像我想要的那样工作。

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

4

1 回答 1

0

“当我按下 [Quit] 按钮或 [escape] 时(但我想保留此选项)”我猜 yad 在循环之外,这是你的问题。

小费。- 我认为用 ping 检查连接没有意义。但也许你需要,也许这是最好的方法。最好在系统内找到 Internet 连接状态的文件并使用 inotifywait 但是 inotify 有时也有问题,所以你应该小心。- 您可以使用 yad 添加自己的图标托盘,但您需要使用 yad 创建两个带有其他图标和标题的功能。当 inetrnet 状态发生变化时,您可以杀死第一个 yad 窗口并打开下一个窗口。当测试状态互联网时,这可以在“while”循环中。

于 2018-12-28T14:31:01.990 回答