Когда происходит расширение истории в bash?

Правила для действий 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 {} \;

1
21.05.2018, 00:51
1 ответ

Как и сказал @Stephen Kitt, расширение истории должно быть завершено ровно на первом этапе. Этот режим можно понять по следующим вещам :, если мы вводим произвольный код bash, например.

echo "the value of a is $a" > tmp

Затем мы используем расширение истории использования,

!-1

Очевидно, что приведенная выше строка снова сделает то же самое. Следует отметить, что !-1сначала будет расширен до echo "the value of a is $a" > tmp. Если такое раскрытие произойдет после этапа синтаксического анализа, то мы должны понимать, что $aне будет правильно проанализирован, чего на самом деле не происходит.

0
02.02.2021, 11:12

Теги

Похожие вопросы