PS1 Shell 變數的正確位置是什麼?
我正在從頭開始關注交叉編譯的 Linux - Embedded .In
$$ 3.3. Setting Up the Environment $$, PS1 在文件中聲明。
.bash_profile
實際上它永遠不會出現在終端中。 當我以 身份登錄時su - clfs
,.bash_profile
和.bashrc
文件都被執行。當我以身份登錄時,su clfs
只有.bashrc
文件被執行。在這兩種情況下,PS1 從未在終端中更新。
當我將 PS1 放入
.bashrc
文件時,它會更新。CLFS 書已將其放入
.bash_profile
文件中,例如:cat > ~/.bash_profile << "EOF" exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash EOF
那麼PS1的合適位置是什麼?
應該為shell 設置
PS1
shell 變數,因為這是為互動式 shell 會話讀取的初始化文件。~/.bashrc``bash
請注意,此變數是shell 變數,而不是環境變數(讓子程序繼承其值是沒有意義的,只有目前的 shell 使用它)。因此,它不需要與
export
.有關的:
您不需要
bash
從任何 shell 的啟動文件開始。~/.profile
如果您正在執行的系統不允許您更改登錄 shell,則可能需要從(或與登錄 shell 相關的相應文件)啟動特定shell。如果那個 shell 已經在執行文件,那麼應該注意不要啟動另一個 shell,否則你可能會陷入無限循環。永遠不需要
exec
您添加到您的程式碼。~/.bash_profile
我想這是一種~/.bashrc
被解析的方式(它啟動一個互動式外殼,並且互動式bash
外殼讀取~/.bashrc
)。一個更好的方法是讓一個文件來源另一個,例如在~/.bash_profile
:if [[ -f $HOME/.bashrc ]]; then source "$HOME/.bashrc" fi
然後設置
PS1
(~/.bashrc
應該不需要觸摸HOME
或TERM
)。該命令所做的另一件事是使用
env -i
. 除非你有非常具體的理由這樣做,否則你不應該從你的普通 shell 啟動文件中這樣做。