Кавычки в bash exec - PullRequest
       64

Кавычки в bash exec

0 голосов
/ 30 апреля 2020

Я хочу запустить приложение в bash с помощью команды exec. Проблема в том, что команда для запуска приложения использует кавычки и не должна содержать повторяющихся пробелов.

Поэтому я попробовал следующий код:

START_CMD="java -jar DockerProcessWrapper.jar -execute \"java -Dlog4j.configurationFile=log4j.xml -jar server.jar\" -shutdown stop"
exec $(echo "$START_CMD" | tr -s " ")

Это не работает, приложение выдает следующую ошибку: org.kohsuke.args4j.CmdLineException: "-Dlog4j.configurationFile=log4j.xml" is not a valid option

Я думаю, что есть проблема с кавычками в команде. Но если я выполняю данную команду самостоятельно, она работает. Как я могу это исправить?

1 Ответ

0 голосов
/ 30 апреля 2020

Вместо того, чтобы провалиться в кроличью нору выхода и цитирования ада, используйте массив аргументов.

start_command=(java -jar DockerProcessWrapper.jar
                    -execute "java -Dlog4j.configurationFile=log4j.xml -jar server.jar"
                    -shutdown stop)
exec "${start_command[@]}"

Чтобы удалить дублирующиеся пробелы из элементов массива, вы можете использовать расширение параметра подстановки с помощью extglob:

shopt -s extglob
exec "${start_command[@]//+( )/ }"
...