Linux

PS1 Shell 變數的正確位置是什麼?

  • October 28, 2019

我正在從頭開始關注交叉編譯的 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應該不需要觸摸HOMETERM)。

該命令所做的另一件事是使用env -i. 除非你有非常具體的理由這樣做,否則你不應該從你的普通 shell 啟動文件中這樣做。

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