Почему файловые системы на основе inode НЕ нуждаются в перезагрузке после обновления версий библиотек? [дубликат]

Заглянув в /etc/init.d/functions на старой системе CentOS, функция daemon эффективно выполняет

/bin/bash -c "[...] ; $*"

$* expands to к аргументам функции, разделенным пробелами, эффективно теряя лишние кавычки вокруг "udp...localhost)". Результат передается в новый shell, который видит следующее:

/root/amr/bin/pcdaemon --daemon -i ens192 -f udp && portrange 3000-8000 && not(src host localhost)

и запускает его как командную строку. && в этот момент не заключен в кавычки, поэтому интерпретируется оболочкой как foo && bar, что означает "запустить foo, затем, если это удастся, запустить bar". Как оказалось, not(src... вызывает синтаксическую ошибку, поэтому ничего не выполняется. Замена not на ! не поможет, потому что, хотя это и устраняет синтаксическую ошибку, оболочка теперь запускает pcdaemon с усеченными аргументами, а затем пытается запустить программу под названием portrange.

Помимо того, что Red Hat исправит сценарий, вы можете обойти эту проблему, поместив командную строку pcdaemon в отдельный сценарий (как предложил Mark Plotnick), или добавив другой набор кавычек. С текущей функцией daemon, я думаю, это должно работать:

daemon /root/amr/bin/pcdaemon --daemon -i ens192 -f "'udp && portrange 3000-8000 && not(src host localhost)'" 

(Хотя если кто-то действительно исправит функцию daemon, то это даст дополнительные кавычки для pcdaemon)

.

3
13.02.2013, 10:16
0 ответов

Теги

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