Передача аргументов скрипту оболочки из файла правил udev
В файле правил скрипт выполняется путем передачи аргументов "LABEL" и "DEVNAME" для монтирования
ACTION=="add", RUN+="/appmount/scripts/usb_mount.sh %E{ID_FS_LABEL} %E{DEVNAME}"
В файле usb_mount.sh выведите значение аргументов как
echo "LABEL: $1 DEVNAME: $2" # this does not work reliably
Некоторые устройства имеют пустое поле LABEL и, следовательно, DEVNAME печатается как метка. В скрипте bash мы можем передавать аргументы в двойных кавычках, и это будет работать, даже если аргументы равны нулю.
Что эквивалентно тому же для передачи аргументов правилам udev?
Обходное решение этой проблемы может заключаться в изменении порядка аргументов. Есть ли надежный способ?
2 ответа
Вы должны иметь возможность использовать одинарные кавычки вместо упомянутых вами двойных кавычек:
ACTION=="add", RUN+="/appmount/scripts/usb_mount.sh '%E{ID_FS_LABEL}' '%E{DEVNAME}'"
Осторожно: я не проверял это. Может быть, подстановка переменной не будет в одинарных кавычках...
Цитировать из man udev
о ключе "RUN":
Имя программы и следующие аргументы разделены пробелами. Одинарные кавычки могут использоваться для указания аргументов с пробелами.
Просто установите и запросите env для udev, вот пример, чтобы проверить, работает ли система VMWare:
cat /etc/udev/rules.d/99-vmware.rules
KERNEL=="id", SUBSYSTEM=="dmi", ATTR{sys_vendor}=="VMware, Inc.", ENV{VMWARE}='defined'
udevadm info -e | grep 'VMWARE='
E: VMWARE=defined