Bash中的Docker参数中的条件

时间:2017-08-05 09:38:18

标签: bash docker

在我的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

2 个答案:

答案 0 :(得分:4)

Build the argument list first (in an array), then call docker. This has the additional benefit of getting rid of the ugly line continuation characters.

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[@]}"

The main idea, though, is to keep the conditional code as small as possible and keep it separate from the unconditional code.

答案 1 :(得分:1)

我建议使用$(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)