Правила для действий add
выполняются во время запуска системы при наличии устройства. Это делается путем запуска udevadm info --action = add
в системе SysVinit и внутри системы Upstart или Systemd. Однако это происходит очень рано в процессе загрузки, в то время, когда корневая файловая система все еще монтируется только для чтения и файловые системы из /etc/fstab
еще не монтируются. Я не уверен, что /run
уже доступен на этом пункте. Это может быть слишком рано для того, что ваш сценарий должен сделать.
Быстрый и грязный, но портативный способ запуска скрипта во время запуска состоит в том, чтобы запустить его с /etc/rc.local
, условно на присутствующем устройстве.
if [ -e /dev/disk/by-id/… ]; then
/var/scripts/my-script.sh
fi
Если устройство вставлено во время запуска, необходимо убедиться в наличии возможного условия гонки: сценарий будет выполнен сразу после обнаружения устройства, а затем снова из /etc/rc.local
.
Более чистое решение состоит в определении системного блока и объявлении зависимостей, необходимых в сценарии. Нужно еще остерегаться потенциального состояния гонки.
-121--185139-
Как описано в разделе Удаляет ли «rm. *» родительский каталог? применяется следующая часть спецификации POSIX:
Если в качестве базового имени указаны либо точка, либо точка. часть операнда (то есть окончательный компонент имени пути) или, если операнд разрешается в корневой каталог, rm должен записать диагностику сообщение о стандартной ошибке и больше ничего не делать с такими операндами.
-121--209596-
При этом будет выполнен поиск по всем процессам с несвязанными открытыми файлами. Найдите те, которые соответствуют вашим путям, и удалите их.
lofs не существует в Solaris по умолчанию.
find /proc/*/fd -type f -links 0 -exec ls -lrt {} \;
Как и сказал @Stephen Kitt, расширение истории должно быть завершено ровно на первом этапе. Этот режим можно понять по следующим вещам :, если мы вводим произвольный код bash, например.
echo "the value of a is $a" > tmp
Затем мы используем расширение истории использования,
!-1
Очевидно, что приведенная выше строка снова сделает то же самое. Следует отметить, что !-1
сначала будет расширен до echo "the value of a is $a" > tmp
. Если такое раскрытие произойдет после этапа синтаксического анализа, то мы должны понимать, что $a
не будет правильно проанализирован, чего на самом деле не происходит.