我正在尝试找到一种调用 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下运行我的文件中的命令,并在常规模式下执行相同的操作,但这并没有发生。shBASH_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 可以docker run ... sh按预期工作,而docker run ... bashdoes not read /etc/profile.
为什么会有这样的差异呢?这种行为是否与手册相矛盾?