2017-03-09 64 views
0

我不確定這對我來說是否清楚,如果對我的系統來說很整潔。我知道〜/ .zhrc文件,我可以在其中存儲別名和路徑,但今天在通過brew安裝節點後,我被要求輸入:export PATH =「$ HOME/.npm-packages/bin:$ PATH」在我的〜/ .bash_profile文件中,它不存在,因此爲了保持我的系統清潔,我把它放在了前一個文件中,但是emacs的投訴。現在,我在〜/ .bash_profile中刪除它,並在創建之後放置它。是否可以將兩者都保存在主目錄中?Files:bash_profile zhrc confusion

+0

你的意思是〜/ .zshrc?你可以在你的主目錄下有〜/ .zshrc和〜/ .bash_profile(和〜/ .bashrc)文件,但是如果你使用zsh作爲你的shell,我很懷疑你放入〜/ .bash_profile的任何內容做出任何改變。當你把它放入〜/ .zshrc時,emacs會有什麼抱怨? – Nick

回答

0

您需要提供您從emacs獲得的任何錯誤或警告消息的確切用詞,以確保準確或更好的答案。不過,我會猜出 ,並假設您得到的警告來自exec-path包。

該軟件包有一個可以禁用的檢查程序,它可以確保您的 變量在正確的init文件中定義。

一般來說,大多數shell都支持兩種類型的配置文件

  • 啓動或登錄初始化文件
  • 交互的shell初始化文件

的區別是多長時間,或者當文件都被(加載)。要了解 的區別,你確實需要了解一個shell運行時和每個shell之間的關係。我會盡量給出不同的高層次的解釋,但你應該閱讀你正在使用的特定shell 的手冊頁。

將您的環境看作殼程序樹。當您登錄到 系統時,會創建一個登錄shell。該shell將成爲您創建的所有其他shell的父級。每次運行一個命令時,它都會在一個新shell中執行(這不是100%準確,但足夠準確,可以解釋主要的 點)。所以當你打開一個終端時,它會運行另一個shell,它是你的登錄shell的一個孩子 。當您執行各種命令時,系統會創建一個新的shell並在shell中運行該命令。這些都是您的 父登錄shell的全部子項。一些shell只存在很短的時間(只要執行命令 ),其他shell可能會持續數小時,數天或可能持續數週(例如運行emacs的shell)。

要記住的重要一點是,子shell從父shell繼承各種設置 。你會在 前面看到的'export'命令的想法實際上是一個命令給shell,告訴它將 變量導出到子shell。例如,如果我們有像

export PATH=/usr/local/bin:/usr/bin:/bin 

線我們真正做的是

PATH=/usr/local/bin:/usr/bin:/bin # set the variable 
export PATH # make it available in child shells 

我們不要總想一些變量需要在孩子重置 要導出變量殼本身。例如,保存提示字符串的變量。 如果您希望提示具有動態組件(如當前的 目錄,日期或時間),則僅在登錄父外殼程序 中定義此變量是行不通的。我們希望在創建時在每個 shell中定義這些類型的變量。

爲了處理這個,shell有兩個不同的init文件。登錄初始化文件 僅爲父shell提供,對於設置所有子shell通用的變量 特別有用。每個shell的初始化文件是 來源於每個新shell,並且最適合用於設置每次啓動shell時需要更新或更改的東西。還有其他的shell 配置文件,可用於其他特殊用途,例如當您註銷或註銷系統時,或者只是將別名定義等等。

曾幾何時,它製造在你放置變量的地方存在很大的差異,因爲 在獲取這些init文件時性能受到影響。如果每個shell初始化文件 太大並且佔用太多資源,則環境的整個性能可能會受到影響。這很大程度上是因爲 增加處理速度而產生的問題。不幸的是,因爲許多人沒有了解不同shell配置文件 之間的角色和關係,有很多關於 應該設置值的錯誤或誤導性信息。人們經常會建議設置變量(例如 示例中的bashrc),當它們應該設置在bash__profile =中時。這個錯誤是 ,部分原因是你可以給bashrc添加一個變量,當你測試它時(通常是因爲你的測試涉及分支一個新的子shell),它會工作, 將它放入你的bash_profile將只能在下一個登錄。

也有一些平臺的差異,使事情少一點 明確。例如,在OSX下,/ etc目錄中實際存在一個特殊文件,您應該添加額外的路徑組件(我現在不是在mac上,現在只是 ,但它類似於/ etc/paths或每個路徑組件文件 /etc/path.d)。這樣做是爲了讓您擁有一個全球位置來設置路徑,這些路徑可以確保桌面進程(例如,不能作爲登錄shell的子進程 運行的dock)能夠進行設置。

一般來說,大多數變量可以去登錄配置,與 異常有關,其具有的變化取決於時間 動態內容,即內容的提示或其他變量的變量,目錄 位置或其他跟蹤特定於殼體 實例的交互式操作。

路徑設置(注意上述操作系統差異)應該寫入配置文件或登錄配置文件中的 。在bash下,這是.bash_profile和 在zsh下,它通常是.zprofile。由於bash已經成爲最常見的shell,所以文檔等常常建議將其添加到.bash_profile中。如果您的zsh運行的是 ,那麼使用.zprofile添加相同的信息。

正如你所說你沒有a.bash_profile,但你確實有一個zshrc文件,我假設你運行的是zsh而不是bash作爲登錄shell。這是 的情況下,您需要將該路徑設置添加到您家 目錄中的.zprofile。 exec-path軟件包抱怨,因爲你將它添加到 zshrc/bashrc中,這不是設置路徑變量的正確位置。如果您的 在OSX下運行,您確實需要將路徑添加到/ etc 中的正確文件(您將需要檢查OSX文檔,因爲我不記得精確的 文件名)。

+0

謝謝,這是一個非常細緻的迴應。我在我的/ etc/paths文件中添加了PATH變量,我應該記住這一點,因爲我之前修改了其他路徑配置,以便使用Brew包而不是MacOS的本機,即emacs。現在看來工作正常,沒有警告和抱怨。 – KonVas