В bash вы можете использовать синтаксис косвенного раскрытия параметров :
test="Monkey in the middle..."
read -p "Enter input: " input
echo ${!input}
В этом случае пользователь должен предоставить test
только строка без предшествующего знака доллара.
У меня была аналогичная проблема, когда сценарий, который я передал в RUN, не работал. Проблема связана с разрешениями, примененными в файле systemd -udevd.service. Вам нужно будет отключить некоторые из этих разрешений. Мое решение было извлечено из этого обсуждения .
Конечным содержимым файла /lib/systemd/system/systemd -udevd.service в моем случае былоследующим образом:
[Service]
Type=notify
OOMScoreAdjust=-1000
Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
Restart=always
RestartSec=0
ExecStart=/lib/systemd/systemd-udevd
KillMode=mixed
WatchdogSec=3min
TasksMax=infinity
MountFlags=slave
MemoryDenyWriteExecute=yes
RestrictRealtime=yes
RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6e
Быстрое решение, предложенное в приведенной мной ссылке, состоит в том, чтобы закомментировать последние семь строк следующим образом:
[Service]
Type=notify
OOMScoreAdjust=-1000
Sockets=systemd-udevd-control.socket systemd-udevd-kernel.socket
Restart=always
RestartSec=0
ExecStart=/lib/systemd/systemd-udevd
#KillMode=mixed
#WatchdogSec=3min
#TasksMax=infinity
#MountFlags=slave
#MemoryDenyWriteExecute=yes
#RestrictRealtime=yes
#RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6e
Более длительное решение состоит в том, чтобы изучить влияние каждого из закомментированных флагов и закомментировать только те, которые применимы к вашим требованиям. Затем перезагрузите и перезапустите службу с помощью следующих команд или перезагрузите пи:
# systemctl daemon-reload
# systemctl restart systemd-udevd.service
У меня была та же проблема (Сбой сценария с кодом выхода 1 при подключении любого USB-накопителя ). Я просто закомментировал строку RestrictRealtime=yes
, и теперь все работает нормально.
В моем случае я получил ту же ошибку systemd-udevd[123456]: 2-2: Process 'touch /tmp/test.txt' failed with exit code 1.
из /var/log/syslog
.
SUBSYSTEM=="usb", ACTION=="add", RUN+="touch /tmp/test.txt"
Но когда я изменил touch
на /usr/bin/touch
, проблема исчезла.
SUBSYSTEM=="usb", ACTION=="add", RUN+="/usr/bin/touch /tmp/test.txt"