Xfce4 genmon插件<txt>不会显示可变内容

时间:2018-05-30 09:14:06

标签: bash xfce

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

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

我写了一个简短的bash脚本,定期用命令$(wget http://checkip.dyndns.org/ -O - -o / dev / null | cut -d:-f 2 | cut - 检查IP地址 - d \&lt; -f 1) 它存储在一个名为IPPUBLIQUE的环境变量中,它工作正常。

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

#!/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为&#34; IP:&#34;。无论我做什么,它都拒绝显示我的IP地址,但是如果我手动设置变量(例如ip = 192.168.0.1而不是ip = $ IPPUBLIQUE)那么它就可以了。

Console Output

Genmon-plugin output

任何人都可以帮助弄清楚发生了什么以及如何纠正它吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

因此,从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 ...

答案 1 :(得分:0)

我尝试创建一个文件,然后在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(感谢)所建议的那样工作正常,但第二部分不起作用,但我找到了一个解决方法(基本上如果我将文件的内容存储在&#39; cat&#39;在变量中,它不会显示,但如果我直接执行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?

感谢您的帮助