Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Docker args带有来自变量的空格。如何使用它>;_Linux_Bash_Docker_Loops_Continuous Integration - Fatal编程技术网

Linux Docker args带有来自变量的空格。如何使用它>;

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/

我在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/“| 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[@]}"