Bash

/etc/bash.bashrc 等效於 sh

  • March 26, 2021

我知道~/.bashrc, ~/.bash_profile,/etc/profile和之間的區別/etc/bash.bashrc。除了 之外/etc/profile,這些都是特定於bashshell 的。

我希望每次以任何使用者身份打開非登錄(互動式或非互動式)shell 時都執行一個腳本,但不是 for bash, for sh。我的目標是讓每次我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 的命令,則需要在命令行上將它們作為參數提供。

引用自:https://unix.stackexchange.com/questions/641296