Bourne shell:它在互動式非登錄時執行什麼?
我這樣問,因為根據https://unix.stackexchange.com/a/46856/84749,當我開始時
screen
,我正在做的是“互動式、非登錄”。實際發生的是我正在登錄 Bourne shell(不是 BASH)系統,當我登錄時,它執行~/.profile
得很好,並設置了我的別名。但是當我執行時,screen
這些別名會失去,它似乎沒有執行~/.profile
或~/.login
我嘗試過的其他任何東西。我在 Raspberry Pi 3 上執行 LibreELEC。
登錄會話在呼叫時
sh
讀取使用者的。~/.profile
如果ENV
在執行此操作後將變數設置為文件名,並且該文件存在,則 shell 將使用該文件來進一步初始化登錄會話。不是登錄 shell 的互動式 shell 將僅使用
$ENV
ifENV
設置,但不會讀取~/.profile
.非互動式 shell 不應使用這兩個文件中的任何一個。
通常,一個出口
ENV
在一個的末尾~/.profile
:ENV="$HOME/.shrc" # for example export ENV # may be done as export ENV="..." too, in most shells.
例如,如果以或 with
bash
呼叫它會發生什麼。sh``bash --posix
可以根據需要使用這兩個文件(
~/.profile
和$ENV
),但配置文件是您可能想要設置和導出只需要設置一次的環境變數(PATH
等等)、啟動任何fetchmail
程序或其他使用者守護程序的地方希望使用等,而該$ENV
文件是您為該特定 shell 會話/TTY 設置特定內容的位置,例如設置GPG_TTY
(如果您使用 GnuPG)、設置別名(因為別名不被子 shell 繼承)等。
ksh93
shell 預設使用and~/.profile
,$ENV
但以$ENV
特定方式解釋。如果$ENV
以/./
or開頭././
,則不會使用系統範圍的配置文件(例如/etc/ksh.kshrc
)。該文件
~/.login
不被 使用sh
,除非ENV
被設置為此文件名或者它明確地來自~/.profile
or$ENV
。