我有一个 Docker 容器,它使用 alpine:3.7
作为基本图像,因此使用 /bin/ash
作为它的外壳。
我将容器置于后台运行模式。我的意图是我可以继续使用 docker exec $CONTAINER_ID <command>
在它。因此,该命令将在非交互、非登录 shell 模式下执行。
但是,有时我的 <command>
处于非标准路径中,因此我很乐意export PATH
所以我不输入完全限定的路径。或者,有时某些软件安装需要我在我们的 shell 初始化文件中放置一些命令(例如 eval "$(pyenv init -)"
)。
问题是:在/bin/ash
下shell,用于非交互式、非登录 shell 命令执行,我可以在哪里导出这个新的 PATH
,或者我的 eval "$(pyenv init -)"
,这样我就可以做我的 docker exec
是否正确加载/采购了所有内容?
如果 Ash 做不到,我也会考虑 Bash。
TIA
最佳答案
由环境变量 ENV
命名的文件是在启动符合 POSIX 的 shell(或 POSIX 模式下的 bash)时获取的。如果您想在非 POSIX 模式下也支持 bash,您还需要设置 BASH_ENV
。
这意味着您可以告诉 Docker 更新环境变量 ENV
以指向一个文件,当由 shell 解释器获取时,该文件将运行 eval "$(pyenv init -) "
.
关于linux - 非交互式、非登录 shell 的 ash 中有哪些初始化文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573182/