Плагин Xfce4 genmon <txt>не будет отображать переменное содержимое - PullRequest
0 голосов
/ 30 мая 2018

У меня проблема с плагином xfce4-genmon.Я использую это, чтобы контролировать мое соединение VPN.Всякий раз, когда я подключаюсь к своему VPN (NordVPN с использованием openpyn), он отображает символ и сервер, к которому я подключен с помощью этой команды: $ (ps ax | grep $ (pidof openvpn) | perl -n -e '//(\ w +) .nordvpn.com / && print $ 1 ')

Я недавно решил, что мне также хотелось бы, чтобы он отображал мой текущий IP-адрес (WAN)

Я написал короткий bashскрипт, который регулярно проверяет IP-адрес с помощью команды $ (wget http://checkip.dyndns.org/ -O - -o / dev / null | cut -d: -f 2 | cut -d \ <-f 1). Хранится впеременная окружения с именем IPPUBLIQUE, и она отлично работает.</p>

Следующим шагом было написание скрипта для универсального плагина монитора, который находится здесь:

#!/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

Когда я тестирую скрипт в консоли, значения каждой переменной верны ираспечатывается с помощью команд эха.Они будут содержать правильные IP-адреса.Однако монитор отображает только $ ip как «IP:».Независимо от того, что я делаю, он отказывается отображать мой IP-адрес, но если я устанавливаю переменную вручную (например, ip = 192.168.0.1 вместо ip = $ IPPUBLIQUE), тогда он работает.

КонсольВывод

Вывод Genmon-плагина

Может кто-нибудь помочь выяснить, что происходит и как я могу это исправить?

Спасибомного

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Я попытался создать файл и затем импортировать его в сценарий 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

в соответствии с предложением Камила Цука (спасибо), который работает нормально, однако вторая часть не работает, но я нашел способ обойти (в основном, если я храню содержимое файла с помощью 'cat' в переменной, этоне отображается, но будет, если я выполню команду 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?

Спасибо за вашу помощь

0 голосов
/ 30 мая 2018

Итак, скрипт, запускаемый из 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 ...
...