使用 PS1 設定的彩色文字和命令的彩色輸出相互混淆

使用 PS1 設定的彩色文字和命令的彩色輸出相互混淆

PS1以一個開始顏色序列(如\[\e[0;32m\])結尾,使終端中的所有文字都著色(在本例中為綠色)。但是,當我使用諸如(在 my 中ls別名)之類的命令時,輸出中的顏色有點混亂:第一個“彩色”單字為綠色,而接下來的無色文字為白色而不是綠色。ls --color=auto.bashrc

有沒有辦法在所有情況下都有乾淨的輸出?當輸出有顏色時,我可以使用白色作為“預設”文字顏色,但我希望它保持一致。

當然,我最想要一個能夠自動應用於所有命令並且不需要我更改調用它們的方式的解決方案。

就我個人而言,我沒有任何想法。也許可以做一些事情來“即時”在輸出中搜尋轉義序列並執行一些替換?不過,我不知道如何實現這一點,特別是它是在「幕後」完成的。

答案1

原因是因為你做錯了。

您說您的提示末尾有一個“開放”顏色序列。這是錯誤的。顏色不築巢。沒有“開啟”和“關閉”之分。它是“切換到...”或“重置為預設值”(實際上是“切換到0”)。因此,當ls --color=auto完成某件事後切換顏色時,它將發出重設為預設值的序列。這不是「回到以前的樣子」。

將終端設定為使用您想要「預設」的文字顏色(即調色盤編號 0)。然後,如果您希望提示具有不同的顏色,請在開始時設定它並在結束時重設。

有關更多信息,請閱讀 Bash 提示符 HOWTO第 6 章 ANSI 轉義序列:顏色與遊標移動文件.

答案2

如同先前所回答的,以PS1開場顏色序列作為結尾並不是一個好主意。這將使彩色命令的輸出錯誤。如果您希望終端前景色(正常文字顏色)為綠色,只需在兩台電腦上的終端模擬器設定中將其設為綠色 - 在本例中為終端guake設定。這樣,前景色保持綠色,並且具有彩色輸出的命令將使用此顏色來顯示普通文字。重置您的PS1提示,就像應該使用 完成的那樣\[\e[0m\]

答案3

以下是我如何為不同的機器做不同顏色的提示。

case $HOSTNAME in
    host1*) PSC="\e[32m" ;;
    host2*) PSC="\e[33m" ;;
    host3*) PSC="\e[34m" ;;
    host4*) PSC="\e[35m" ;;
    *) PSC="\e[36m" ;;
esac

PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "

其餘的大家可以自行品嚐。將這個 ~/.bashrc 的副本放在您使用的每台電腦上。如果您使用安裝了 NFS 的 home,它就會自動完成。

相關內容