Interactive

Bourne shell:它在互動式非登錄時執行什麼?

  • January 28, 2017

我這樣問,因為根據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 將僅使用$ENVifENV設置,但不會讀取~/.profile.

非互動式 shell 不應使用這兩個文件中的任何一個。

通常,一個出口ENV在一個的末尾~/.profile

ENV="$HOME/.shrc"     # for example
export ENV            # may be done as export ENV="..." too, in most shells.

例如,如果以或 withbash呼叫它會發生什麼。sh``bash --posix

可以根據需要使用這兩個文件(~/.profile$ENV),但配置文件是您可能想要設置和導出只需要設置一次的環境變數(PATH等等)、啟動任何fetchmail程序或其他使用者守護程序的地方希望使用等,而該$ENV文件是您為該特定 shell 會話/TTY 設置特定內容的位置,例如設置GPG_TTY(如果您使用 GnuPG)、設置別名(因為別名不被子 shell 繼承)等。

ksh93shell 預設使用and ~/.profile$ENV但以$ENV特定方式解釋。如果 $ENV/./or開頭././,則不會使用系統範圍的配置文件(例如/etc/ksh.kshrc)。

該文件~/.login不被 使用sh,除非ENV被設置為此文件名或者它明確地來自~/.profileor $ENV

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