Chi*_*rlo 11 shell scripting shell-script
对于带有大量参数的命令,我喜欢在脚本中使用以下格式(为了可读性):
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
Run Code Online (Sandbox Code Playgroud)
但是,有时我想将这些参数之一注释掉,例如:
# -p 8080:8080
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 EOL 被解释为返回并且命令失败。也试过这个:
\ # -p 8080:8080
Run Code Online (Sandbox Code Playgroud)
这也不起作用。
问题:有没有办法注释掉参数,所以它仍然在它自己的行上,但我可以执行脚本?
Kus*_*nda 14
你不能注释掉一行。
请注意,由于换行符被转义,命令实际上是一行(对于 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
Run Code Online (Sandbox Code Playgroud)
或者,如果您想偶尔删除或更改-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
Run Code Online (Sandbox Code Playgroud)
然后只需更改或注释掉对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[@]}"
Run Code Online (Sandbox Code Playgroud)
在数组赋值中,注释掉一行没有问题:
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[@]}"
Run Code Online (Sandbox Code Playgroud)
Jef*_*ler 11
您可以替换一个空命令替换:
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
Run Code Online (Sandbox Code Playgroud)