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