為什麼 PS1 檔案會被某些外部流程違背我的意願進行實體變更?

為什麼 PS1 檔案會被某些外部流程違背我的意願進行實體變更?

之後這裡發生了非常奇怪的事情使能Linux在我的 Chromebook 上。這雖然不是什麼大問題,但卻非常奇怪。為什麼PS1總是被設定成這個?

\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\] \[\033[01;34m\]$\[\033[00m\]

即使我在結束時使用這個.profile

export PS1='\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " >> %s") \[\033[01;34m\]$\[\033[00m\] '

真正令人驚訝的是,無論我放在哪裡export PS1=,它都會得到文件中的物理更改到我上面提到的第一個PS1條目。意味著所有這些可能的位置都得到實際上改變了PS1並透過一些外部過程放回預燒狀態:

  • ~/.profile
  • ~/.bashrc
  • /etc/profile.d/git.sh

更奇怪的是!當我創建一個名為 example 的文件~/.prompt,並將其添加到~/.bashrcor中運行時~/.profilesource ~/.prompt然後文件也會被覆蓋。

我已經export PROMPT_COMMAND=''按照我看到的建議進行了設置,這不起作用,但引導我:

到目前為止,只有這個有效,我想知道為什麼:

function prompt_command {
    export PS1='\[\033[01;34m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " >> %s") \[\033[01;34m\]$\[\033[00m\] '
}

export PROMPT_COMMAND=prompt_command

答案1

你似乎已經安裝了git它,我相信它是你看到的變化的原因,當它添加$(__git_ps1 " >> %s")到你的 PS1 字串的中間時。

PROMPT_COMMAND 之所以有效,是因為它會在每次 Bash 顯示提示之前重複執行,因此會覆寫變更。

你應該確保在 git 完成它的工作後設定 PS1,但我不知道它在哪裡。

注意:請參閱此 堆疊溢位答案

相關內容