【问题标题】:Xfce4 genmon plugin <txt> won't display a variable contentXfce4 genmon 插件 <txt> 不会显示变量内容
【发布时间】:2018-05-30 09:14:06
【问题描述】:

我遇到了 xfce4-genmon-plugin 的问题。我用它来监控我的 vpn 连接。 每当我连接到我的 VPN(使用 openpyn 的 NordVPN)时,它都会显示一个符号以及我使用以下命令连接到的服务器:$(ps ax | grep $(pidof openvpn) | perl -n -e '// (\w+) .nordvpn.com/ && print $1')

我最近决定也希望它显示我当前的 IP 地址 (WAN)

我编写了一个简短的 bash 脚本,它定期使用命令 $(wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\

下一步是为通用监视器插件编写一个脚本,这里是:

#!/bin/bash
echo $IPPUBLIQUE
ip=$IPPUBLIQUE
echo $ip
ip="IP:$ip"
echo $ip
checkvpn=$(nmcli con |grep tun0)

if [ -n "$checkvpn" ]
 then
   echo "<img>/home/richard/Scripts/vpn.png</img>"
   echo "<txt>$ip; "$(ps ax | grep $(pidof openvpn) | perl -n -e '/\/(\w+)    \.nordvpn\.com/ && print $1')"</txt>"
   echo "<click>/home/richard/bin/./killvpngenmon.sh</click>"
   echo "<tool>Connected to VPN</tool>"
   echo "<img>/home/richard/Scripts/novpn.png</img>"

 else
   echo "<img>/home/richard/Scripts/novpn.png</img>"
   echo "<txt>$ip</txt>"
   echo "<click>gksudo /home/richard/bin/autovpn</click>"
   echo "<tool>Not connected to VPN</tool>"
   echo "<img>/home/richard/Scripts/vpn.png</img>"
fi

当我在控制台中测试脚本时,每个变量的值都是正确的,并使用 echo 命令打印出来。它们将包含正确的 IP 地址。 但是,监视器仅将 $ip 显示为“IP:”。无论我做什么,它都拒绝显示我的 IP 地址,但如果我手动设置变量(例如 ip=192.168.0.1 而不是 ip=$IPPUBLIQUE),它就会起作用。

Console Output

Genmon-plugin output

谁能帮助弄清楚发生了什么以及我该如何纠正它?

非常感谢

【问题讨论】:

  • 是的,除非您为其设置了一个值,否则它将不起作用,将值设置为IPPUBLIQUE#!/bin/bash 之后的IP 或将其作为命令行参数之一传递
  • 什么意思?你介意给我举个例子吗?
  • 您拥有的脚本没有将值设置为变量,您希望它如何包含 IP
  • 实际上 IPPUBLIQUE 是在另一个脚本中设置的,当我在控制台中运行时,我得到以下输出:77.136.204.197 77.136.204.197 IP:77.136.204.197 /home/richard/Scripts/novpn .png IP: 77.136.204.197gksudo /home/richard/bin/autovpn未连接到VPN/home /richard/Scripts/vpn.png 所以变量似乎设置了,但之后没有显示

标签: bash xfce


【解决方案1】:

因此,从 genmon 运行的脚本没有 IPPUBLIQUE 的值。为什么不直接在脚本中获取公共 ip?

#!/bin/bash
IPPUBLIQUE=$(wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1)
echo $IPPUBLIQUE
.... rest of the script ...

您可以将 IPPUBLIQUE 的值导出到文件中:

echo "IPPUBLIQUE=$(wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1)" > /tmp/.IPPUBLIQUE

然后从你的脚本中导入文件:

#!/bin/bash
. /tmp/.IPPUBLIQUE
echo $IPPUBLIQUE
.... rest of the script ...

【讨论】:

  • 我不想运行 #IPPUBLIQUE=$(wget checkip.dyndns.org -O - -o /dev/null | cut -d: -f 2 | cut -d\
【解决方案2】:

我尝试创建一个文件,然后在 genmon 脚本中导入它。

一个脚本获取 WAN 地址并将其存储在文件 /tmp/.adresse 中:(在这里)

#!/bin/bash
ip=$(wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1)
ip="${ip:1}"
echo $ip > /tmp/.adresse

按照 Kamil Cuk 的建议(谢谢),它工作正常,但第二部分不起作用,但我找到了解决方法(基本上,如果我将文件的内容与 'cat' 存储在变量中,它不会' t 显示,但如果我直接执行 cat 就会显示)

代码 1(不起作用)

#!/bin/bash

ip= cat /tmp/.adresse
echo $ip
checkvpn=$(nmcli con |grep tun0)
echo $checkvpn

if [ -n "$checkvpn" ]
 then

  echo "<img>/home/richard/Scripts/vpn.png</img>"
  echo "<txt>$ip; "$(ps ax | grep $(pidof openvpn) | perl -n -e '/\/(\w+)\.nordvpn\.com/ && print $1')"</txt>"
  echo "<click>/home/richard/bin/./killvpngenmon.sh</click>"
  echo "<tool>Connected to VPN</tool>"
  echo "<img>/home/richard/Scripts/novpn.png</img>"

 else

  echo "<img>/home/richard/Scripts/novpn.png</img>"
  echo "<txt>$ip</txt>"
  echo "<click>gksudo /home/richard/bin/autovpn</click>"
  echo "<tool>Not connected to VPN</tool>"
  echo "<img>/home/richard/Scripts/vpn.png</img>"

fi

代码 2(解决方法)

#!/bin/bash

checkvpn=$(nmcli con |grep tun0)
echo $checkvpn

if [ -n "$checkvpn" ]
 then

  echo "<img>/home/richard/Scripts/vpn.png</img>"
  echo "<txt>"$(cat /tmp/.adresse)"; "$(ps ax | grep $(pidof openvpn) | perl -n -e '/\/(\w+)\.nordvpn\.com/ && print $1')"</txt>"
  echo "<click>/home/richard/bin/./killvpngenmon.sh</click>"
  echo "<tool>Connected to VPN</tool>"
  echo "<img>/home/richard/Scripts/novpn.png</img>"

 else

  echo "<img>/home/richard/Scripts/novpn.png</img>"
  echo "<txt>"$(cat /tmp/.adresse)"</txt>"
  echo "<click>gksudo /home/richard/bin/autovpn</click>"
  echo "<tool>Not connected to VPN</tool>"
  echo "<img>/home/richard/Scripts/vpn.png</img>"

fi

一切正常,所以一切都很好,但我不明白为什么代码 1 不起作用,谁能解释一下为什么解决方案 2 有效,但不是 1?

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多