Bash
在命令行提示符中為主機名著色
我希望為命令行提示符的主機名部分(在 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
只需在您的顏色轉義序列周圍添加這些,以便它們不計入提示長度。