Добавление параметров в цикле к команде CLI - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу предоставить команде python несколько параметров, хранящихся в файле. Пример

command \
--param="var1" \
--param="var2" \
--param="var3 var3"

Я пытаюсь: прочитать их из файла и сохранить в виде массива или строки.Конечно, любые оптимальные решения приветствуются.Однако существует проблема с синтаксическим анализом сценария python при использовании циклов / конкатенации строк и предоставлении переменной команде.

stringparam=""
declare -a myarray=()

while read -r line || [[ -n "$line" ]]; do
    if [ ! -z "$line" ]; then
        myarray[$index]="--param=\"$line\""
        index=$(($index+1))
        stringparam+="--param=\"${line}\" "
    fi
done < "${input_file}"

echo ${myarray[@]}
echo "${prontos}"


# Execution
python_lib \
    "${force}" \
    --p1="${varp1}" \
    --p2="${varp2}" \
    --p3="${varp3}" \
    --p4="${varp4}" \
    --p5="${varp5}" \
    "$(for i in "${myarray[@]}"; do echo ${i}; done)" # approach 1
    "${stringparam}" # approach 2

Принимая во внимание содержимое файла:

moon - pancake

sun - star star

Вывод в сценарии:

  1. Как это должно выглядеть, если предоставлено вручную, т.е. --param = "moon - pancake",и т. д.

    param = (u'moon - блин ', u'sun - звездная звезда')

  2. Как это выглядит при добавлении цикла или объединенной строки:

    param = (u '"moon - блин" --param = "sun - star star"',)

Prolly что-то делать со строками;много "деклараций. Что я делаю не так и есть ли лучшее решение для bash для этого?

1 Ответ

0 голосов
/ 09 декабря 2018

Я думаю, что ваш второй подход более похож на GNU / Bash, НО вы не должны использовать кавычки вокруг него, в противном случае все содержимое $ stringparam будет рассматриваться как уникальный параметр вашей python-lib исполняемой программой.

Вы должны удалить кавычки вокруг него, на этот раз - все пробелы следует рассматривать как разделитель параметров:

# Execution
python_lib \
    "${force}" \
    --p1="${varp1}" \
    --p2="${varp2}" \
    --p3="${varp3}" \
    --p4="${varp4}" \
    --p5="${varp5}" \
    $stringparam # approach 2

Но чтобы избежать проблем со смешанными одинарными и двойными кавычками, вы должны использовать простые кавычки, когдапостроение переменной $ stringparam:

stringparam="$stringparam --param='${line}'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...