Скрипт в rc.d (...магическая передача аргументов)

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1

Скрипт в rc.d

Сообщение rooty »

Здравствуйте!

Есть скрипт в rc.d у которого есть вот такая строчка:

Код: Выделить всё

trac_flags="-d -p ${trac_port} -b ${trac_host} --pidfile=${pidfile} --basic-auth=${NAMEDIR_PROJECT_1},${PATH_PASSFILE_1},${NAME_REALM_1} ${DIR_PRO
JECT_1}"


к этому rc.d скрипту подключается конфиг файл так

Код: Выделить всё

. "/usr/local/etc/trac.conf"

в котором
DIR_PROJECT_1="/usr/local/www/trac/myproject"
NAMEDIR_PROJECT_1="myproject"
PATH_PASSFILE_1="/usr/local/www/trac/.htpasswd"
NAME_REALM_1="My Realm Name"


Все отлично запускается.

Вот тут у меня и возникает вопрос, как все может работать правильно?

Что бы отдебажить сие чудо добавил в скрипт запуска вот такое:

Код: Выделить всё

echo "/usr/local/bin/tracd" ${trac_flags}

и получил в ответ при запуске скрипта такое:

Код: Выделить всё

/usr/local/bin/tracd -d -p 3333 -b 10.72.0.14 --pidfile=/var/run/trac/trac.pid --basic-auth=myproject,/usr/local/www/trac/.htpasswd,My Realm Name /usr/local/www/trac/myproject


Меня волнует опция: --basic-auth, точнее фраза My Realm Name которая содержит пробелы .
Саму демону передается данные так:

Код: Выделить всё

[root@florix]:/usr/local/etc/rc.d# tracd --help
Usage: tracd [options] [projenv] ...


То есть получается, что в [projenv] от rc.d скрипта должно передаться "Realm Name /usr/local/www/trac/myproject" вместо "/usr/local/www/trac/myproject" ... правильно?

И из-за этого соображения изначально я писал так:

Код: Выделить всё

trac_flags="-d -p ${trac_port} -b ${trac_host} --pidfile=${pidfile} --basic-auth=\"${NAMEDIR_PROJECT_1},${PATH_PASSFILE_1},${NAME_REALM_1}\" ${DIR_PROJECT_1}"

т.е. все что передается в --basic-auth= я заключил в экранированные кавычки чтоб получилось такое: (echo мне выдал это)

Код: Выделить всё

/usr/local/bin/tracd -d -p 3333 -b 10.72.0.14 --pidfile=/var/run/trac/trac.pid --basic-auth="myproject,/usr/local/www/trac/.htpasswd,My Realm Name /usr/local/www/trac/myproject" /usr/local/www/trac/gar


И тут демон матерится что ему недостаточно информации в --basic-auth= :mellow:

И под конец, что меня убило... если я в консольно руками скопирую строчку (с экранированными кавычками)

Код: Выделить всё

/usr/local/bin/tracd -d -p 3333 -b 10.72.0.14 --pidfile=/var/run/trac/trac.pid --basic-auth="myproject,/usr/local/www/trac/.htpasswd,My Realm Name /usr/local/www/trac/myproject" /usr/local/www/trac/gar

и отправлю на сервер, демон запуститься без всяких проблем.

вот.. я что-то неправильно понимаю? :unsure:
Спасибо сказали:
Аватара пользователя
ddc
Бывший модератор
Сообщения: 3535
Статус: OpenBSD-compatible
ОС: OpenBSD -current

Re: Скрипт в rc.d

Сообщение ddc »

trac получает массив argv, который он дальше парсит. Видимо, он снимает последний аргумент как [projectenv], а остальные исследует как [options], объединяя всё, что попалось между ключами...
Спасибо сказали: