我知道~/.bashrc
、~/.bash_profile
、/etc/profile
和之间的区别/etc/bash.bashrc
。除了 之外/etc/profile
,这些都是特定于bash
shell 的。
我希望每次以任何用户身份打开一个脚本时都运行一个脚本未登录(交互式或非交互式)shell,但不适用于bash
、 for sh
。我的目标是拥有一个每次docker exec ... /bin/sh
进入 Alpine Linux 容器时都会运行的脚本。这个容器没有bash
。
有没有这样的全局配置文件sh
?如果没有,是否可以模仿这种行为?
答案1
的行为sh
由 POSIX 指定。 Linux 系统可能有多种用作 的 shell /bin/sh
,包括但不限于 bash、dash、mksh 或 ash,虽然其中每一个可能都有用于实现这种情况下的行为的自定义机制,但您唯一可以依赖的POSIX 指定了所有这些内容。
指定交互使用的配置文件的方法sh
是将环境变量设置ENV
为该文件的名称。除此之外,POSIX 不为非登录 shell 提供标准文件。 POSIX 的文本如下:
当且仅当调用交互式 shell 时,该变量应由 shell 进行参数扩展(请参阅参数扩展),并且结果值应用作包含要在当前环境中执行的 shell 命令的文件的路径名。该文件不必是可执行的。如果 的扩展值
ENV
不是绝对路径名,则结果未指定。ENV
如果进程的真实有效用户ID或真实有效组ID不同,则忽略。
如果您需要非交互式 shell 的命令,则需要将它们作为命令行上的参数提供。