udev не выполняет часть сценария

Я пытаюсь заставить udev отключить мою клавиатуру ноутбука, когда внешняя клавиатура подключена. До сих пор у меня есть следующий сценарий, который работает, когда я называю его непосредственно.

#!/bin/bash
export DISPLAY=":0"
export XAUTHORITY="/run/user/1002/gdm/Xauthority"
echo $XAUTHORITY >> /home/apockli/list
echo helloX >> /home/apockli/list
echo `which git` >> /home/apockli/list
echo `/usr/bin/git status` >>/home/apockli/list
echo `/usr/bin/xinput list` >> /home/apockli/list
/usr/bin/xinput float `/usr/bin/xinput list | awk '/Apple/' | sed -r 's/.*id=([0-9]+).*/\1/g'`
echo `/usr/bin/xinput list` >> /home/apockli/list

Когда выполнено путем фактического подключения клавиатуры list файл содержит следующее:

/run/user/1002/gdm/Xauthority
helloX
/usr/bin/git
*<Some trailing blank lines>*

Я действительно не понимаю почему which git работы, но /usr/bin/git status не делает и xinput команды, которые ни один не записан в файл или на самом деле заканчивает тем, что отключил клавиатуру.

Любая справка значительно ценилась бы, поскольку я уже потратил слишком долго попытку заставить это работать.

Спасибо

1
задан 14 November 2017 в 13:36

1 ответ

Да, Это должно тот путь. Udev запускает команду в другом рабочем каталоге, чем тот, который Вы ожидаете. Проверьте его путем добавления:

pwd >>/home/apockli/list

Так пробуют путем изменения корневого каталога:

echo `/usr/bin/git -C /home/apockli/ status` >>/home/apockli/list

Кроме того, у Вас должен быть выходящий репозиторий мерзавца, для наблюдения вывода иначе Вы получаете только пустую строку:

$ git status
fatal: Not a git repository (or any of the parent directories): .git

То, что Вы видите, является сообщением об ошибке, которое является от stderr поток нет stdout.

0
ответ дан 8 December 2019 в 03:51

Другие вопросы по тегам:

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