$PATH 变量中的 ~ 忽略根文件夹

$PATH 变量中的 ~ 忽略根文件夹

我在容器中使用 Alpine Linux。ENV PATH="~/.local/bin:$PATH" \我的 Dockerfile 中有

当登录到 shell 时,我可以成功ls ~/.local/bin,与 相同ls /root/.local/bin,目标二进制文件就在那里。

不过,我直接调用二进制文件,否则which mybin它将无法工作。显式添加后/root/.local/bin,就可以了。

我不确定为什么会发生这种情况,因为~/.local/bin/root/.local/bin是相同的。

有任何想法吗?谢谢!

编辑:

重复链接让我对发生的事情有了一些了解,但我发现这不是主要原因。删除引号仍然不起作用,因为 DockerfileENV指令不会执行任何 shell 扩展。

似乎唯一可行的方法是在指令export &&中使用CMD

也不$HOME符合ENV指令。

答案1

虽然我不确定您使用的是哪个 shell,但假设是 bash,您将需要指定$HOME而不是除了交互式命令行之外,在其他地方~使用是不安全的。~

内部脚本中的某些位置~也可以工作,但在变量内部定义它们可能会产生意想不到的结果,正如您所经历的那样。

您还可以回显$PATH以查看内容是什么。

echo $PATH

您将看到,在当前的实现中,它将包含路径,而不是字面意义上的自我~/.local/bin扩展。/root/.local/bin~

相关内容