非交互式、非登录 shell 的 ash 中源自哪些初始化文件?

问题描述 投票:0回答:1

我有一个 Docker 容器,它使用

alpine:3.7
作为基础镜像,因此使用
/bin/ash
作为其 shell。

我将容器置于后台运行模式。我的目的是我可以不断地使用

docker exec $CONTAINER_ID <command>
。因此,该命令将以非交互式、非登录 shell 模式执行。

但是,有时我的

<command>
位于非标准路径中,因此我想
export PATH
这样我就不会输入完全限定的路径。或者,有时某些软件安装需要我在 shell 初始化文件中放入一些命令(例如
eval "$(pyenv init -)"
)。

问题是:在

/bin/ash
shell下,对于非交互式、非登录shell命令执行,我可以在哪里导出这个新的
PATH
,或者我的
eval "$(pyenv init -)"
,这样我就可以用一切都正确加载/来源?
如果 Ash 做不到的话我也会考虑 Bash。

蒂亚

linux bash dockerfile ash
1个回答
1
投票
docker exec

命名的文件是在交互模式下启动符合 POSIX 的 shell(或 POSIX 模式下的 bash)时,或在任何条件下启动 1999 BSD ash 时获取的。如果您想在非 POSIX 模式下也支持 bash,您还需要设置

ENV
(与传统的 BSD ash 一样,即使对于非交互式 shell,它也受到尊重)。
这意味着您可以告诉 Docker 更新环境变量 

BASH_ENV

以指向一个文件,当 shell 解释器获取该文件时,该文件将运行

ENV
    

© www.soinside.com 2019 - 2024. All rights reserved.