【发布时间】:2019-01-25 23:44:10
【问题描述】:
我在 Bash 中遇到了以前从未遇到过的情况,不知道如何解决。我在 Alpine Linux(Docker 容器)上安装了 bash,出于某种原因,带有引号的环境变量会逐字翻译。
MY_PATH="/home/my/path"
> cd $MY_PATH
结果
bash: cd: "/home/my/path": No such file or directory
> echo $MY_PATH
结果
"/home/my/path"
现在,如果您不带引号尝试它,它会起作用
MY_PATH=/home/my/path
> cd $MY_PATH
结果
bash-4.4#(路径已更改)
> echo $MY_PATH
结果
/home/my/path
我以前从未见过这种情况,因为我希望 bash 会吞噬外部引号,甚至不确定在尝试解决此问题时要搜索什么。
为了完全限定场景,让我指出:
- 将 Docker 与 Alpine (3.8) 映像一起使用
- 在 Alpine 上安装通常默认为 ash shell 的 Bash 4
更新
这开始看起来像一个 docker 问题。我正在使用env_file in Docker Compose 将环境变量推送到容器中,它看起来像是在复制引号" => \"。
感谢@bishop 的评论尝试od -x
container.env
#!/usr/bin/env bash
MY_PATH="/home/my/path"
然后在运行env的Alpine 3.8容器内
MY_PATH="/home/my/path"
更新 2
看起来有一个bug around this that was closed. 但显然似乎并不固定。是因为我是世界上唯一还在使用 Docker Toolbox 的人吗?
【问题讨论】:
-
你确定你使用
"作为双引号,而不是“或”? -
是的,非常确定。单引号也是同样的问题。
-
echo $MY_PATH | od -x并发布结果。 -
OK,
’和‘除了'之外还存在。 -
bash-4.4# echo $MY_PATH | od -x0000000 2f22 6f68 656d 6d2f 2f79 6170 6874 0a22 0000020
标签: bash docker docker-compose environment-variables