Bash

導出或不導出 bash PS1 變數

  • August 26, 2020

我剛剛花了很多時間閱讀登錄和互動式 shell,以及為什麼應該或不應該在各種配置文件和 bashrc 文件中設置環境變數、shell 函式等。在這篇文章中提到了 bash 特定的東西,比如提示選項應該在 ~/.bashrc 中設置。這讓我想知道 PS1 變數。在我看到的所有關於此的範例中,它們都有類似export PS1="". 這真的應該被導出到環境中,因為它只對 bash 有意義嗎?只是PS1=""在我的 ~/.bashrc 中對我產生了預期的效果,但我想知道我是否遺漏了一些東西。

沒錯:PS1僅在 bash 的互動式實例中才有意義,因此應該設置它~/.bashrc而不應該導出它。PS1在其他 shell 中也有意義,但它具有不同的含義,因為 shell 之間的提示擴展不同。事實上,即使在 bash 實例之間,PS1也可以有不同的含義,因為含義取決於 shell 選項(至少promptvars)。

從 from導出PS1到環境.profile是對 1970 年代的倒退,當時只有一個 shell 使用它(Bourne shell)並且它沒有配置文件。如果您始終使用相同的外殼並且從不進行不同的配置,它今天仍然有效。但是所有不是純粹為腳本設計的現代 shell(csh、ksh、bash、zsh 等)在互動式啟動時都會讀取配置文件(、、、、、… ).cshrc,因此不再需要 1970 年代的方法。在特定於 shell 的文件中設置和其他特定於 shell 的設置,而不是將其導出到環境,避免在您使用不同的 shell 配置或不同的 shell 或無法顯示通常提示的不同終端時破壞事情幻想。環境.kshrc``.bashrc``.zshrc``PS1``PS1在特定於 shell 的文件中始終有效,而將其設置.profile和導出僅在“簡單”情況下有效,因此沒有理由不以正確的方式進行操作,但是網路上有很多不好的教程,甚至發行版中的錯誤預設配置。生活吧

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