вложенные кавычки в параметре, вызывающие странное поведение в скрипте bash в jenkins - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь запустить сценарий 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, но безуспешно.

Кто-нибудь сталкивался с чем-то подобным? Есть ли способ цитирования, который поможет мне преодолеть это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...