bash - 如何在Dockerfile中正确格式化嵌套的bash命令?

标签 bash docker dockerfile

更新:该命令不是有效的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/

相关文章:

mongodb - 调用包裹在docker中的mongodump

docker - 是否可以为 `docker build` 设置 MAC 地址?

php - Docker - 安装 php-memcached 扩展不工作?

docker - 为什么我的 docker 镜像在导入后运行时无法启动应用程序

docker - Jenkins Kubernetes 插件无法配置 jnlp-slave pod

docker - apierror-visualeditor-docserver-http-error :( curl 错误:7)无法连接到服务器

linux - 用于批量重命名文件夹中文件的 Shell/Bash 快捷方式

bash - 如何使用 sed 从文件中获取 SOA 序列号?

linux - 将设置行与 -f 命令混淆

linux - Tex 发送另一个命令