このコードを使うと
#!/bin/bash
set -x
PROPERTIES="MAINTAINER=Self, My"
while IFS='=' read -r key value
do
ADDITIONAL_PARAMETERS+="-F variables[${key}]=${value} "
done <<< "${PROPERTIES}"
#ADDITIONAL_PARAMETERS="$(echo -e "${ADDITIONAL_PARAMETERS}" | sed -e 's/[[:space:]]*$//')"
curl -k -X POST -F token=TOKEN -F "ref=master" \
-F "variables[GIT_REF]=GIT_REF" \
-F "variables[GIT_COMMIT]=GIT_COMMIT" \
${ADDITIONAL_PARAMETERS} \
https://gitlab.url.net
不明ないくつかのプロパティをビルドパラメータとしてGitLabパイプラインに渡そうとします。
問題は、引用符が間違った場所に生成され、次の呼び出しとエラーが発生するようです。
+ curl -k -X POST -F token=TOKEN -F ref=master -F 'variables[GIT_REF]=GIT_REF' -F 'variables[GIT_COMMIT]=GIT_COMMIT' -F 'variables[MAINTAINER]=Self,' My https://gitlab.url.net
curl: (6) Couldn't resolve host 'My'
curl: (6) Couldn't resolve host 'gitlab.url.net
一重引用符はどこから来たのですか?変数の途中に2番目の引用があるのはなぜですか?-F 'variables[MAINTAINER]=Self,' My
ベストアンサー1
あなた本物次のタスクを実行するには配列を使用する必要があります。http://mywiki.wooledge.org/BashFAQ/050
#!/bin/bash
properties="MAINTAINER=Self, My"
curl_opts=(
-k
-X POST
-F token=TOKEN
-F "ref=master"
-F "variables[GIT_REF]=GIT_REF"
-F "variables[GIT_COMMIT]=GIT_COMMIT"
)
while IFS='=' read -r key value; do
curl_opts+=( -F "variables[$key]=$value" )
done <<< "$properties"
curl "${curl_opts[@]}" https://gitlab.url.net
私の考えでは、このコードが正確であるだけでなく、読みやすくなります。
また、ALL_CAPS_VARNAMESを使用しないでください。これをシェル予約として扱います。