Я сделал сценарий для выполнения rsync и добавил read line
в конце для хранения вывода видимым после того, как это работало; это работает, как предназначено, когда я запускаю скрипт вручную.
Я заставил udev управлять RUN+="/home/user/bin/scriptfile"
выполнять мой выше сценария и сценария действительно работает, как предназначено, но производить, не отображен в окне терминала. Почему не, и как я могу сделать его так?
редактирование - для разъяснения: Я попробовал инициирование всевозможные сценарии от правил udev, и оно хорошо работает, запущенные скрипты, и сделайте то, к чему я ожидаю их. Вопрос, могу я печатать вывод на мой экран, когда сценарий работает. Я могу направить вывод к файлу журнала, который работает также, но я хотел бы получить его видимый на экране, когда скрипт запускается.
В первую очередь, почему Вы не видите вывода? Как указано Sergiy Kolodyazhnyy в комментариях, сценарии, запущенные udev ", не наследовались весь одинаковый переменные среды, что означает, что у них нет способа знать, где и какую сессию GUI Вы выполняете". В более простых терминах udev не осведомлен когда дело доходит до Вашего настольного GUI.
я в настоящее время делаю что-то подобное тому, что Вы попросили USB-устройств, которые включаются в мою систему. Для приложения я работаю, я должен знать, имеет ли USB допустимый порядковый номер. Так или иначе вот то, как я заставил его произойти.
Обзор:
, Если Вы просто хотите видеть его в окне терминала, Вы могли бы сказать Вашему сценарию помощника просто повторять текст от именованного канала в окне терминала.
<час>Пример кода:
#!/bin/bash
#This script should be called once without an argument to get it running in a "service" mode
#Successive calls to this script by UDEV sould pass a string as the first argument.
# These strings will then be displayed in the window running in service mode.
pipe=/tmp/messages
if [ "$1" == "" ]; then
[ ! -e "$pipe" ] && mkfifo "$pipe"
while true # this loop continuously reads new lines and echos them
do
line=$(cat "$pipe")
echo "$line"
done
fi
# you won't reach this line unless you call this script with one argument
echo "$1" >> "$pipe"
Запущение этого скрипта:
/tmp/sample_script.sh
(будет удален на перезагрузке) chmod +x /tmp/sample_script.sh
/tmp/sample_script.sh
/tmp/sample_script.sh "message to send"
(заметьте, что мы передаем аргумент строки, "обменивайтесь сообщениями для отправки", здесь) При запущении скрипта от udev, Вы не сможете заставить второй экземпляр производить что-либо на экране непосредственно, не перенаправляя его через именованный канал, потому что Ваш udev сценарий называют от среды, которая является абсолютно отдельной от среды, в которой работает Ваш GUI. Именованный канал создал в сценарии и используемый в обоих действиях сред как мост между этими двумя, позволив Вам передать информацию от udev среды до среды GUI, на которую Вы смотрите.