Bash中Docker参数中的条件
在我的bash文件中有这样的内容Bash中Docker参数中的条件,bash,docker,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 但是
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通过显示以下结果进行投诉。有什么想法吗?
我建议使用$(如果…;那么…;fi)
:
我建议使用$(如果…;那么…;fi)
:
首先构建参数列表(在数组中),然后调用
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[@]}"
不过,其主要思想是使条件代码尽可能小,并将其与无条件代码分开。首先构建参数列表(在数组中),然后调用
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[@]}"
不过,其主要思想是尽可能使条件代码小,并将其与无条件代码分开。这种方法也不起作用,因为它创建了一个docker运行命令,如果if为false,则不会添加任何后续命令。我的意思是该命令应该附加图像的名称。@Mazzy:您测试过吗?这种方法也不起作用,因为它创建了一个docker运行命令,如果if为false,则不会添加任何后续命令。我的意思是,该命令应该附加图像的名称。@Mazzy:您测试过了吗?docker命令的目的是使这两个
--log opt
标志存在还是不存在?是的,正确。docker命令的目的是使您具有或不具有这两个--log opt
标志?是正确的。它是