/etc/bash.bashrc 相当于 sh

/etc/bash.bashrc 相当于 sh

我知道~/.bashrc~/.bash_profile/etc/profile和之间的区别/etc/bash.bashrc。除了 之外/etc/profile,这些都是特定于bashshell 的。

我希望每次以任何用户身份打开一个脚本时都运行一个脚本未登录(交互式或非交互式)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 的命令,则需要将它们作为命令行上的参数提供。

相关内容