@catquistador

Как разделить передаваемые программе аргументы в баш-скрипте?

суть проблемы:
есть bash-скрипт, генерирующий аргументы для запуска приложения и запускающий его
псевдокодом:
!#/bin/bash
function generateArgs(){
 echo "--arg1=$somevar1 --arg2=$somevar2 ... --arg1337=$somevar1337"
}
args=$(generateArgs)
exec java "$args"

где generateArgs возвращает некое (плавающее, в зависимости от условий) число аргументов
в текущей реализации они все на уровне приложения (и, кажется, что java тут unrelated, т.к воспроизводится на множестве приложений) мёрджатся в 1 аргумент и мы падаем с ошибкой
"неизвестный аргумент --arg1=1 --arg2=2 --arg3=3"

ЧЯДНТ?
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ответы на вопрос 3
yarkov
@yarkov
Проект "Жизнь после смерти" - lifeafterdeath.ru
А если кавычки у $args убрать?
Ответ написан
hint000
@hint000
у админа три руки
Подумайте в сторону xargs.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
С минимальными изменениями можно сделать вот такой рабочий вариант:
#!/bin/bash
function generateArgs(){
 echo --arg1=$somevar1 \"--arg2=$somevar2 and spaces\" ... --arg1337=$somevar1337
}
eval "args=($(generateArgs))"
exec java "${args[@]}"

Т.е. каждый отдельный аргумент в котором могут быть пробелы вывести с кавычками и собрать их в массив. Элементы массива в подстановке "${args[@]}" передаются поотдельности и пробелы внутри них обрабатываются правильно.

Но это, конечно, коряво и лучше переделать функцию, чтобы она собирала массив аргументов по-человечески.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы