передача аргументов в сценарий оболочки из файла правил 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?

Обходной путь к этой проблеме может заключаться в изменении порядка аргументов. Есть ли надежный способ?


person Talespin_Kit    schedule 04.12.2012    source источник


Ответы (2)


Вы должны иметь возможность использовать одинарные кавычки вместо упомянутых вами двойных кавычек:

ACTION=="add", RUN+="/appmount/scripts/usb_mount.sh '%E{ID_FS_LABEL}' '%E{DEVNAME}'"

Осторожно: я не проверял это. Возможно, подстановка переменных не удастся в одинарных кавычках...

Цитата из man udev о ключе "RUN":

Имя программы и последующие аргументы разделяются пробелами. Одинарные кавычки можно использовать для указания аргументов с пробелами.

person Carsten Scholtes    schedule 20.02.2013

Просто установите и запросите 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
person RzR    schedule 09.10.2014