Я пытаюсь запустить сценарий bash в работе Фристайла Дженкинса, но получаю странное включение дополнительных цитат, которые выдают ошибки в сценарии.
Я наконец-то нашел дополнительные цитаты, добавив ненужные объемы отладки, так что я все еще не уверен, действительно ли это является причиной проблемы или нет.
Сценарий Jenkins (параметр label
в задании либо пуст, либо заполнен из восходящего потока):
#!/usr/bin/env bash
set -ex
if [[ -z $label ]]; then
echo "label not provided"
labelSend=" "
else
echo "label provided"
labelSend="--label \"$label\" "
fi
./label-script.sh --stack-id $stack_id --update $update "$labelSend"
, а сценарий label-script
имеет синтаксический анализатор параметров, например:
#!/usr/bin/env bash
set -e
print_usage () {
echo
echo "Usage: label-script.sh [OPTIONS]"
echo
echo "Does stuff."
echo
echo " Options:"
echo " --stack-id ID"
echo " --update Use 'true' if this is an update"
echo " --label Optional. Overrides the label"
echo
}
parse_args () {
if [[ $# -eq 0 ]]; then
print_usage
exit 0
fi
while [[ $# -gt 0 ]]
do
key="$1"
case ${key} in
--stack-id) stack_id=$2; shift;;
--update) update=$2; shift;;
--label) label=$2; shift;;
*) print_usage; exit 1;;
esac
shift
done
}
parse_args "$@"
# further script things
Теперь, если я запускаю задание Jenkins, я вижу такой вывод:
+ [[ -z testing woo ]]
+ echo 'label provided'
label provided
+ labelSend='--label "testing woo" '
+ ./label-script.sh --stack-id 1 --update false '--label "testing woo" '
и сценарий печатает меню справки, а не продолжает код.
Обратите особое внимание на дополнительные '
вокруг параметра label при вызове скрипта. Я думаю, что именно это приводит к сбою моего скрипта, так как он не может проанализировать данный параметр. Я должен включить label
в какой-либо форме кавычек, потому что это может быть строка из нескольких слов, которую нужно соответствующим образом заключить в кавычки для синтаксического анализа сценария.
Я пробовал все варианты строки labelSend=--label $label
, о которых я могу думать - вложенные кавычки, без кавычек, экранированные кавычки и т. Д. c, но безуспешно.
Кто-нибудь сталкивался с чем-то подобным? Есть ли способ цитирования, который поможет мне преодолеть это?