Я сохраняю аргументы команды в переменной. Последняя команда, которую я хочу:
mock -r myconfig --define "debug_package %{nil}" --resultdir results --rebuild mypackage.src.rpm
Вот моя попытка:
set -x # for debugging
RESULTDIR=results
MOCK_CONFIG="myconfig"
MOCK_ARGS="-r $MOCK_CONFIG --define \"debug_package %{nil}\" --resultdir $RESULTDIR"
cmd="mock $MOCK_ARGS --rebuild mypackage.src.rpm"
$cmd
Результаты следующие:
+ RESULTDIR=results
+ MOCK_CONFIG=myconfig
+ MOCK_ARGS='-r myconfig --define "debug_package %{nil}" --resultdir results'
+ cmd='mock -r myconfig --define "debug_package %{nil}" --resultdir results --rebuild mypackage.src.rpm'
+ mock -r myconfig --define '"debug_package' '%{nil}"' --resultdir results --rebuild mypackage.src.rpm
ERROR: Bad option for '--define' ("debug_package). Use --define 'macro expr'
Как видите, аргументы параметра --define
не цитируются должным образом. --define
думает, что я передаю только debug_package
, что является неполным.
Я пробовал различные варианты кавычек при определении MOCK_ARGS
, даже пытаясь избежать пробела между debug_package
и %{nil}
.
Какая комбинация кавычек и / или экранирования позволяет мне создать этот список аргументов и выполнить команду из этого скрипта?
РЕДАКТИРОВАТЬ:
Причина, по которой я сохраняю результирующую команду в переменной, заключается в том, что она передается функции, которая ведет журнал, а затем выполняет команду.
Кроме того, я наткнулся на этот FAQ, в котором предлагается использовать массивы вместо переменной. Я начал экспериментировать с массивами, но пока у меня нет рабочего решения.