Bash
/etc/bash.bashrc 等效於 sh
我知道
~/.bashrc
,~/.bash_profile
,/etc/profile
和之間的區別/etc/bash.bashrc
。除了 之外/etc/profile
,這些都是特定於bash
shell 的。我希望每次以任何使用者身份打開非登錄(互動式或非互動式)shell 時都執行一個腳本,但不是 for
bash
, forsh
。我的目標是讓每次我docker exec ... /bin/sh
進入 Alpine Linux 容器時都執行一個腳本。此容器沒有bash
.有沒有這樣的全域配置文件
sh
?如果沒有,是否可以模仿這種行為?
的行為
sh
由 POSIX 指定。Linux 系統可能有多種用作 的 shell/bin/sh
,包括但不限於 bash、dash、mksh 或 ash,雖然在這種情況下,它們中的每一個都可能具有用於實現行為的自定義機制,但您唯一可以依賴的就是所有這些都是 POSIX 指定的。指定用於互動使用的配置文件的方法
sh
是將ENV
環境變數設置為該文件的名稱。除此之外,POSIX 沒有為非登錄 shell 提供標准文件。來自 POSIX 的文本如下:此變數,當且僅當呼叫互動式 shell 時,應由 shell 進行參數擴展(請參閱參數擴展),並且結果值應用作包含要在目前環境中執行的 shell 命令的文件的路徑名. 該文件不必是可執行的。如果 的擴展值
ENV
不是絕對路徑名,則未指定結果。ENV
如果程序的真實有效使用者ID或真實有效組ID不同,則應忽略。如果您需要用於非互動式 shell 的命令,則需要在命令行上將它們作為參數提供。