Bash

/etc/profile.d 中的腳本有什麼作用?

  • December 5, 2019

我正在閱讀來自Linux Command Line 和 Shell Scripting Bible的基本 shell 腳本。

它說該/etc/profile文件在 Bash shell 啟動時設置環境變數。該/etc/profile.d目錄包含其他腳本,其中包含特定於應用程序的啟動文件,這些腳本也在啟動時由 shell 執行。

  • /etc/profile如果這些文件對 Bash 啟動也很重要,為什麼它們不是其中的一部分?
  • 如果這些文件是特定於應用程序的啟動文件,對 Bash 啟動並不重要,那麼為什麼它們是啟動過程的一部分?為什麼它們僅在執行包含設置的特定應用程序時才執行?

如果這些文件對 Bash 啟動也很重要,為什麼這些文件不是 /etc/profile 的一部分?

如果您的意思是,“為什麼它們不只是組合成一個巨​​大的腳本?”,答案是:

  1. 因為這對於負責腳本的人來說將是一場維護噩夢。
  2. 因為將腳本作為獨立模組載入會使整個系統更加動態地調整——可以添加和刪除單個腳本而不會影響其他腳本。等等。
  3. 因為它們是通過 /etc/profile 載入的,這使得它們以同樣的方式成為 bash“配置文件”的一部分。

如果這些文件是特定於應用程序的啟動文件,對 Bash 啟動並不重要,那麼為什麼它們是啟動過程的一部分?為什麼它們僅在執行包含設置的特定應用程序時才執行?

在我看來,這似乎是一個更廣泛的設計哲學問題,我將其一分為二。第一個問題是關於使用 shell 環境的價值和適當性。它有積極的價值嗎?是的,它很有用。它是所有配置問題的最佳解決方案嗎?不,但它對於管理簡單參數非常有效,並且被廣泛認可和理解。相比之下,決定異構配置這些東西,也許 $ PATH could be managed by a separate independent tool, preferred tools such as $ EDITOR 可能在某處的 sqlite 文件中,$LC lang 的東西可能在其他地方具有自定義格式的文本文件中,等等——不只是使用 env 變數並且/etc/profile.d突然看起來更簡單了嗎?您可能已經知道 env 變數是什麼,它們如何工作以及如何使用它們,而不是學習 5 種完全不同的機制,用於恰當地命名為“環境”的 5 個不同的普遍方面。

第二個問題是,“啟動是不是這個合適的時間?”,這引出了反對意見,即它不是很有效(所有可能會或可能不會被使用的數據等)。但:

  • 實際上,它並沒有那麼多數據,部分原因是沒有人會使用它來處理幾個簡單的參數(因為還有其他配置應用程序的方法)。
  • 如果明智地使用它,關於通常呼叫的東西,那麼在每次呼叫時從某個文件中設置例如預設 $CFLAGSgcc效率會降低。請記住,所涉及的記憶體量也是無限小的。
  • 它可能涉及到多個應用程序可能涉及的系統性事物,而外殼是一個共同點

可以在該列表中添加更多內容,但希望這能讓您對問題的利弊有所了解——主要的“贊成”和主要的“反對”是它是一個全域命名空間。

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