Я использовал описанный ниже метод, удалив первые вхождения оранжевого цвета в файле
perl -pne "s/ /\n/g" o.txt|sed '/^$/d'| sed '0,/oranges/s/oranges//g'| sed '/^$/d'| perl -pne "s/\n/ /g"| sed "s/apples.*bananas/applesandfriends/g"
выход
applesandfriends pomelos oranges
D -Шина проверяет, совпадают ли UID вызывающего процесса и демона сеанса. Ваш сценарий должен быть запущен notify-send
от имени целевого пользователя. Если вы настаиваете на запуске скрипта от имени root, то в скрипте вам нужно sudo -u user notify-send …
.
Имейте в виду, что sudo
очищает среду, поэтому DBUS_SESSION_BUS_ADDRESS
из среды скрипта не попадет в средуnotify-send
(/etc/sudoers
и политика безопасности может позволить sudo
сохранить переменную, но в вашем случае это, вероятно, не произойдет по умолчанию ).
Вы можете попробовать изменить настройки, я не буду вдаваться в подробности. Также естьsudo -E
(см. man 8 sudo
). Наименее навязчивый метод — запрос sudo
на установку переменной по требованию :
sudo -u user DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
notify-send "I want to see this"
Когда оболочка, обрабатывающая сценарий, расширяется $DBUS_SESSION_BUS_ADDRESS
, команда становится:
sudo -u user DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \
notify-send "I want to see this"
и эту форму также можно использовать напрямую, так что решать вам.
В общем случае можно настроить так, чтобы sudo
не разрешалось устанавливать переменную даже таким образом. В худшем случае должно работать следующее:
sudo -u user sh -c '
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "I want to see this"
'