Два вопроса из первоначальной постановки вопроса:
-exec
, должна быть завершена с помощью ;
. rsync
. Это то, что я думаю, вы можете захотеть:
find components -iname "*.html" -exec rsync -R {}./build/ ';'
Чтобы скопировать файл с помощью rsync
, вам нужно будет указать, куда он должен быть скопирован в . Здесь я предположил, что вы хотите скопировать все найденные файлы в ./build/
.
После обновления вопроса:
Команда, которую выполняет find
, должна заканчиваться символом ;
-, защищенным от оболочки. Правильный способ защитить ;
от командной оболочки — указать его в кавычках с помощью \;
или ';'
¹.
Поскольку вы используете \\;
, вы «отменяете» цитирование ;
и вместо этого процесс find
просто увидит завершение \
. Поскольку он не видит ;
, он будет жаловаться на отсутствие аргументов.
Вы где-то упомянули npm
. Это менеджер пакетов для JavaScript. Поскольку вы упомянули об этом, это наводит меня на мысль, что вы запускаете find
не из командной строки, а из какого-то сценария. Цитирование может (потенциально )работать по-разному внутри скрипта в зависимости от конкретных грамматических и синтаксических правил этого скриптового языка.
Чтобы правильно решить эту проблему, было бы очень полезно увидеть фактический вызов find
в контексте скрипта, который его вызывает.
До тех пор, пока вопрос не будет дополнен этой информацией, ответ, который я здесь дал, будет настолько точным, насколько это возможно.
¹ (или ";"
или более экзотические формы, такие как $';'
или $'\u003b'
в зависимости от корпуса, ';'
является наиболее портативным)
В моем Debian (, но я готов поспорить, что ваша CentOS делает то же самое ), часть инициализации загрузки модуля выполняется /etc/init.d/kmod
.
Ниже приведен фрагмент этого скрипта:
files=$(modules_files)
if [ "$files" ] ; then
grep -h '^[^#]' $files |
while read module args; do
[ "$module" ] || continue
load_module "$module" "$args"
done
fi
Где:
modules_files
— это функция оболочки, которая анализирует различные файлы и каталоги (, включая /etc/modules-load.d
), и создает список загружаемых модулей.
load_module
— это функция оболочки, которая выполняет работу modprobe
+ некоторое ведение журнала, если установлен подробный флаг.
Так что я бы сказал, что да, модули загружаются последовательно, и если один блокируется, то он блокирует и другие....
но...
При чтении исходного кода linux/modules.c мы видим, что:
Вероятно, системный вызов реализован функцией load_module()
. Мы видим, что он выполняет множество действий (по инициализации, выделению памяти, проверке работоспособности, проверке подписи и т. д. )и возвращается сreturn do_init_module(mod);
(строкой 3927
Функция do_init_module()
выполняет в строке 3574 следующую операцию и, если все прошло нормально, возвращает 0.
if (mod->init != NULL)
ret = do_one_initcall(mod->init);
if (ret < 0) {
goto fail_free_freeinit;
}
Я пришел к выводу, что системный вызов вернется только тогда, когда :1. Модуль загружен в память. 2. Его функция инициализации ()успешно выполнена.
Итак, если ваш вызов wait_for_random_bytes()
является частью функции инициализации вашего модуля, то да, он может блокировать загрузку других модулей.