Первый аргумент, прошедший к сценарию обертки, игнорируется

httpd обычно не является командой, которая находится в пути входа по умолчанию. Вам лучше явно указать полный путь к исполняемому файлу, например. / usr / sbin / httpd .

4
03.11.2018, 16:06
1 ответ

Замените последнюю строку на:

exec su someuser -c '/tmp/elasticsearch-6.4.2/bin/elasticsearch "$@"' -- dummy-argv0 "$@"

Как правило, это способ передачи аргументов через команду su:

su user -c 'command "$@"' -- argv0 "$@"

Вы должны опустить --в системах, отличных от -linux.

suсинопсис на справочной странице(su [options] [username])вводит в заблуждение, вот немного слов из-под него:

Additional arguments may be provided after the username, in which case they are supplied to the user's login shell.

....

You can use the -- argument to separate su options from the arguments supplied to the shell.

Вы также должны заменить все echoна printf '%s\n'..., так как echo, встроенный в bashи zsh, и /bin/echoиз Linux, сами будут использовать аргумент -E(совершенно противоположно тому, что требует стандарт ). Как правило, нет никакого способа безопасно использовать echoс переменными, которые могут расширяться до -n, -eили -E.

Примечание:

Использование "$@"— единственный способ сохранить аргументы в том виде, в каком они были переданы. --Любая вариация su -c "command $*"будет работать, только если ни один из аргументов не содержит пробелов или любых других специальных символов, которые могут быть интерпретированы оболочка. Даже текущий пример может быть легко подорван с помощью mkdir -p repositories.url.allowed_urls=http:/snapshot.test.only.ME.and.ME.and.MEв домашнем каталоге someuser.

5
27.01.2020, 20:54

Теги

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