Невозможно отправить уведомления из задания cron

Решение 1

grepимеет встроенную опцию -, я сам иногда ею пользуюсь.
Изman grep:

       -o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each  such  part  on  a  separate
          output line.

Затем вы можете использовать tr, чтобы избавиться от нежелательных символов:

$ tr -d '"'

Тестовая строка:

$ echo 'SMI::enterprises.9.9.543.1.2.3.1.3.1.1.2 = STRING: "securityk9"' | grep -E -o '"(.*?)"' | tr -d '"'

Выход:

securityk9

Решение 2

Другой способ, если количество полей, разделенных пробелами -согласовано, может заключаться в использованииcuttr, так что по-прежнему 2 канала, и я уверен, что это можно сделать за один прогон):

$ cut -d ' ' -f 4 | tr -d '"'

Тест:

$ echo 'SMI::enterprises.9.9.543.1.2.3.1.3.1.1.2 = STRING: "securityk9"' | cut -d ' ' -f 4 | tr -d '"'
securityk9

Решение 3

Использование perlдолжно быть наиболее универсальным и переносимым среди всех систем Linux и Unix с установленным Perl 5.Направьте свой вывод на:

perl -p -e 's/.*?"(\w+)"/$1/g' -

Пример:

$ echo 'SNMPv2-SMI::enterprises.9.9.543.1.2.3.1.3.1.1.1 = STRING: "ipbasek9"' | perl -p -e 's/.*?"(\w+)"/$1/g' -
ipbasek9

Пояснение:

-p           iterate over each line of input
-e           execute following code
s/foo/bar/g  substitute 'foo' with 'bar' globally, in entire line
.*?"         match any characters non-greedy, so up to first left-most double quote "
(\w+)        match and capture into $1 any word-characters (alphanumeric, underscore _, plus connector punctuation chars)
$1           substitute with with whatever was captured in first parenthesis 
0
07.01.2020, 02:56
1 ответ

Я добавил это в свой crontab, и все мои уведомления работают (в настоящее время тестируются с zenity и notify -send):

DISPLAY=":0.0"
XAUTHORITY="/home/me/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
5
28.01.2020, 02:29

Теги

Похожие вопросы