多行命令:注释掉一行

多行命令:注释掉一行

我喜欢在带有大量参数的命令的脚本中使用以下格式(为了便于阅读):

docker run \
 --rm \
 -u root \
 -p 8080:8080 \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

但是,有时我想注释掉这些参数之一,例如:

# -p 8080:8080  

这不起作用,因为 EOL 被解释为返回并且命令失败。也尝试过这个:

\ # -p 8080:8080

这也不起作用。

问题:有没有办法注释掉参数,这样它仍然在自己的行上,但我能够执行脚本?

答案1

你不能注释掉一行的一部分。

请注意,由于换行符被转义,该命令实际上是一行(对于 shell 解析器),并且无法注释掉单行的一部分(除了最后)。

相反,也许只需在编辑器中复制原始命令并将其完全注释掉,同时保持修改后的命令不被注释:

docker run \
 --rm \
 -u root \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

# Was originally:
# docker run \
# --rm \
# -u root \
# -p 8080:8080 \
# -v jenkins-data:/var/jenkins_home \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -v "$HOME":/home \
# jenkinsci/blueocean

或者,如果您偶尔想删除或更改-p选项及其参数(假设bash或具有相同数组语法的 shell):

port=( -p 8080:8080 )

docker run \
 --rm \
 -u root \
 "${port[@]}" \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

然后只需将分配更改或注释掉即可port

更进一步:

docker_run_args=(
    --rm 
    -u root 
    -p 8080:8080 
    -v jenkins-data:/var/jenkins_home 
    -v /var/run/docker.sock:/var/run/docker.sock 
    -v "$HOME":/home 
    jenkinsci/blueocean
)

docker run "${docker_run_args[@]}"

在数组赋值内部,注释掉一行没有问题:

docker_run_args=(
    --rm 
    -u root 
#    -p 8080:8080 
    -v jenkins-data:/var/jenkins_home 
    -v /var/run/docker.sock:/var/run/docker.sock 
    -v "$HOME":/home 
    jenkinsci/blueocean
)

docker run "${docker_run_args[@]}"

答案2

您可以替换一个空命令替换:

docker run \
 --rm \
 -u root \
 $(: -p 8080:8080 ) \
 -v jenkins-data:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v "$HOME":/home \
 jenkinsci/blueocean

相关内容