我正在处理一个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)。不幸的是,当我按[退出]按钮或[退出](但我想保留此选项)时,它不会像我喜欢的那样工作。
我应该添加/更改什么?错误在哪里?
答案 0 :(得分:0)
”,当我按下[退出]按钮或[退出]时(无论如何, 选项)” 我想yad不在循环中,这是您的问题。
提示。 -用ping检查连接没有意义。 但是也许您需要,也许这是最好的方法。 最好应该在系统内部找到文件以了解互联网连接状态并使用inotifywait 但是,有时卵化也有问题,因此您应该小心。 -您可以使用yad添加自己的图标托盘, 但是您需要使用yad和其他图标和标题创建两个函数。 当inetrnet状态将更改时,您可以杀死第一个Yad窗口并打开下一个窗口。 测试状态互联网时,可以在“ while”循环中。