GNOME 終端是一種非登錄外殼嗎?
根據什麼是登錄和非登錄外殼的答案?在 Ask Ubuntu 上,GNOME 終端是一種非登錄 shell。*正如優秀的書《Fedora 和 Red Hat Enterprise Linux 實用指南,第 6 版》*中所指出的:
互動式非登錄 shell 執行 ~/.bashrc 文件中的命令。預設的 ~/.bashrc 文件呼叫 /etc/bashrc。
因此,
/etc/profile
不會在非登錄 shell 中處理。但是,我發現我已將 java 主路徑附加到PATH
變數中,當我使用 GNOME 終端並發出命令java
時,一切正常。此外,PATH
變數的值與我在 中定義的值相同/etc/profile
。鑑於上述事實,存在衝突,我的理解有什麼問題?
當您通過顯示管理器或 tty 登錄到您的 x 會話時,
/etc/profile
(通常 - 顯然是在您的情況下,儘管某些圖形 shell 不讀取它)是由您的 shell 程序提供的。之後,將獲取一個本地文件(我假設您在此處使用 bash)~/.bash_profile
或~/.bash_login
將~/.profile
獲取源文件,並且此處定義的任何環境變數都將為/etc/profile
目前使用者覆蓋。此環境由您在會話中打開的任何 shell*繼承。*這就是為什麼我們可以在這些文件中定義環境變數,例如您的 PATH。當您打開 gnome-terminal 時,預設情況下會啟動一個非登錄 shell,但它會繼承您已經從登錄 shell 或圖形 shell 載入的使用者環境。由於
~/.bashrc
是在啟動互動式 shell(例如打開 gnome-terminal)時獲取的,它可以用於覆蓋環境的某些元素(例如 PS1)。(gnome-terminal 本身是一個應用程序,而不是一個 shell)