我正在尝试找到一种调用 shell 的方法(我需要首先支持 bash 和 posix shell),以确保在开始时执行某些命令(/etc/profile
或~/.profile
任何其他命令)。
当我执行以下操作时:
echo "echo 'test'" > /tmp/file
BASH_ENV=/tmp/file ENV=/tmp/file sh
Run Code Online (Sandbox Code Playgroud)
我得到:
test
$
Run Code Online (Sandbox Code Playgroud)
这很好。检查$SHELL
发现它实际上正在模式bash
下运行sh
。
当我尝试同样的操作时bash
:
echo "echo 'test'" > /tmp/file
BASH_ENV=/tmp/file ENV=/tmp/file bash
Run Code Online (Sandbox Code Playgroud)
我得到:
$
Run Code Online (Sandbox Code Playgroud)
我希望让 bash 在模式ENV
下运行我的文件中的命令,并在常规模式下执行相同的操作,但这并没有发生。sh
BASH_ENV
更广泛的背景是,我正在尝试构建一个可以在其中调用bash
或 的docker 容器sh
,但环境变量确保一开始就在 shell 中执行一些初始化。
Dockerfile
所以重现问题的最小值是:
FROM alpine
RUN apk add bash
RUN echo "echo 'test'" >> /etc/profile
ENV ENV=/etc/profile
ENV BASH_ENV=/etc/profile
Run Code Online (Sandbox Code Playgroud)
同样,构建后,运行 with 可以 …