Bash

在命令行提示符中為主機名著色

  • May 8, 2018

我希望為命令行提示符的主機名部分(在 bash 中)設置自定義顏色。

在我的.bashrc文件中,預設的命令行提示符是:

PS1='[\u@\h \W]\$ '

為了只為主機名著色,我想出了這個提示:

PS1='[\u@\e[40;36m\h\e[0m \W]\$ '

我為我工作的每個主機使用了不同的顏色。著色部分似乎按預期工作。但是,在上面的提示下,命令行上的導航變得功能失調。例如,有時我無法將游標移動到行首或行尾。如果我切換回預設提示,一切都會再次正常工作。

我的彩色提示有什麼問題?我怎樣才能正確地為主機名指定顏色?

這個問題無關緊要,但我正在執行 Arch Linux KDE,我在 Konsole 工作。

背景

對特殊提示序列進行擴展後,將統計提示中剩餘的每個字元,以計算提示的長度。

問題

由於您添加了顏色序列,實際上不應將其計入提示的長度,bash現在實際上認為您的提示比實際更長。

正因為如此,bash無法知道線路的開始或結束在哪裡,這會產生上述功能障礙。

解決方案

bash手冊:

\[    Begin a sequence of non-printing characters, which could be used to 
      embed a terminal control sequence into the prompt

\]    End a sequence of non-printing characters

只需在您的顏色轉義序列周圍添加這些,以便它們不計入提示長度。

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