在猛砸

在猛砸

问题描述:

码头工人的说法在我的bash文件条件我有这样的事情在猛砸

docker run -d \ 
    --network=host \ 
    --name my-service \ 
    --log-driver="$LOGGING" \ 
    if [[ "$LOGGING" == 'splunk' ]]; then 
    echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}} \\"; 
    echo "--log-opt env=NODE_ENV \\"; 
    fi 

但shellcheck通过展示以下结果抱怨。任何想法? https://github.com/koalaman/shellcheck/wiki/SC1089

+0

您是否打算使用docker命令导致无论是否有这两个“--log-opt”标志? –

+0

是的。它是 – Mazzy

首先构建参数列表(数组中的),然后电话docker。这有利于摆脱丑陋的连续字符。

docker_opts=(
    -d 
    --network=host 
    --name my-service 
    --log-driver="$LOGGING" 
    --log-opt="$log_opt" 
) 

if [[ $LOGGING == splunk ]]; then 
    docker_opts+=(
     --log-opt "tag={{.ImageName}}/{{.Name}}/{{.ID}} \\" 
     --log-opt "env=NODE_ENV \\" 
    ) 
fi 

docker run "${docker_opts[@]}" 

虽然主要的想法是保持条件代码尽可能小,并保持它与无条件代码分开。

我建议使用$(if ..; then ...; fi)

docker run -d \ 
    --network=host \ 
    --name my-service \ 
    --log-driver="$LOGGING" \ 
    $(if [[ "$LOGGING" == 'splunk' ]]; then 
    echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}}" 
    echo "--log-opt env=NODE_ENV" 
    fi) 
+0

这种方法不起作用,或者是因为它创建了一个docker运行命令,如果if为false,则不会添加任何下一个命令。我的意思是该命令应该附加图像的名称。 – Mazzy

+1

这是等待发生的引用错误。 – chepner

+0

@Mazzy:你测试过了吗? – Cyrus