更新:该命令不是有效的JSON。 Docker在检测到有效的JSON数组时将使用RUN
的“exec形式”,否则,如果检测到无效的JSON,它将退回到使用RUN
的“shell形式”。
["bash", "-c", "bash -c 'echo SHLVL: \$SHLVL'"] << \$ is illegal JSON!
但是,如果我添加额外的
\
,则Bash不会对SHLVL
进行变量扩展。而是打印SHLVL: $SHLVL
。在https://github.com/moby/moby/issues/40140#issuecomment-546638065上查看详细信息嵌套的bash实例会增加
SHLVL
环境变量(http://tldp.org/LDP/abs/html/internalvariables.html)。例如:
$ echo $SHLVL
1
$ bash -c "echo \$SHLVL"
2
$ bash -c "bash -c 'echo \$SHLVL'"
3
我正在尝试在Dockerfile中执行相同的命令,但出现错误(在我的Github Actions https://github.com/dgroomes/docker-shell-example/commit/20ee36e913729b7cbf7f0e46ffebf359af5cf1a9/checks?check_suite_id=282718710#step:6:20中看到此错误)。
Step 3/3 : RUN ["bash", "-c", "bash -c 'echo SHLVL: \$SHLVL'"]
---> Running in 2255c65b43c9
/bin/sh: 1: [bash,: not found
Dockerfile + Bash的组合是否会导致字符转义问题?
最佳答案
您的容器未安装bash,请改用sh -c
运行命令。尽管如此,大多数看起来容器已经为您的命令运行了/bin/sh
。这意味着运行echo SHLVL: \$SHLVL
就足够了。
关于bash - 如何在Dockerfile中正确格式化嵌套的bash命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58568027/