Linux Docker args带有来自变量的空格。如何使用它>;
我在stackoverflow(还有谷歌)搜索了3个小时,没有找到正确的答案 在我的CI中,需要动态添加docker构建参数。我需要从env变量中使用它 我有一个带docker arg的字符串:Linux Docker args带有来自变量的空格。如何使用它>;,linux,bash,docker,loops,continuous-integration,Linux,Bash,Docker,Loops,Continuous Integration,我在stackoverflow(还有谷歌)搜索了3个小时,没有找到正确的答案 在我的CI中,需要动态添加docker构建参数。我需要从env变量中使用它 我有一个带docker arg的字符串: DOCKER\u ARGS=“CURL\u ARGS=”-khttps://example.invalid/“| ARG2=As | ARG3=asdas” 在我的*.sh中,我编写了一些代码: DOCKER\u ARGS=“CURL\u ARGS=”-khttps://example.invalid/
DOCKER\u ARGS=“CURL\u ARGS=”-khttps://example.invalid/“| ARG2=As | ARG3=asdas”
在我的*.sh中,我编写了一些代码:
DOCKER\u ARGS=“CURL\u ARGS=”-khttps://example.invalid/“| ARG2=As | ARG3=asdas”
如果[!-z“$DOCKER_ARGS”];然后
参数列表=()
当读取-d“|”ARG |[[-n”$ARG]];
做
ARG_LIST+=(“--build ARG$ARG”)
完成您的脚本存在一些问题
在当前处理中,CURL_ARGS
将设置为'-khttps://example.invalid/“
包括引号。从输入中删除引号,或者编写自己的取消引号删除例程
由于IFS
而从输入中删除尾随空格和前导空格,并由于或缺少-r
而解释缺少的斜杠序列
将值为--build arg$arg
的单个元素分配给数组。稍后必须在build arg
和$arg
之间的空格上进行拆分。而是分配两个元素,一个用于--build arg
,另一个用于$arg
更好的脚本可能如下所示:
docker_args="CURL_ARGS=-k https://example.invalid/|ARG2=As|ARG3=asdas"
arg_list=()
if [[ -n "$docker_args" ]]; then
# split input on `|`
# Potentially use readarray to handle newlines
IFS='|' read -r -a args <<<"$docker_args"
# Add --built-arg to arrays
for arg in "${args[@]}"; do
# Proper quoting
arg_list+=(--build-arg "$arg")
done
fi
# proper quoting
docker build -t test . "${arg_list[@]}"
docker\u args=“CURL\u args=-khttps://example.invalid/|ARG2=As | ARG3=asdas“
参数列表=()
如果[-n“$docker_args”];然后
#在“|”上拆分输入
#可能使用readarray来处理换行符
如果s=“|”read-r-a args检查脚本,非常感谢您的回答!它工作得很好!
DOCKER_ARGS="CURL_ARGS='-k https://example.invalid/'|ARG2=As|ARG3=asdas"
read -d"|" ARG
ARG_LIST+=("--build-arg $ARG")
docker_args="CURL_ARGS=-k https://example.invalid/|ARG2=As|ARG3=asdas"
arg_list=()
if [[ -n "$docker_args" ]]; then
# split input on `|`
# Potentially use readarray to handle newlines
IFS='|' read -r -a args <<<"$docker_args"
# Add --built-arg to arrays
for arg in "${args[@]}"; do
# Proper quoting
arg_list+=(--build-arg "$arg")
done
fi
# proper quoting
docker build -t test . "${arg_list[@]}"