2011-09-25 66 views
6

在着色終端的提示時,我發現了一個惱人的錯誤。如果我把我提示一個彩色的,如在終端中設置顏色會導致奇怪的字符行限制

export PS1='\e[1;34m[\e[0;31m\D{%Hh%M} \e[0;32m\u\e[[email protected]\e[0;35m\h\e[0m:\e[0;36m\w\e[1;34m]\e[0m $ ' 

然後它開始時,我得到的輸入行一些大小打破:

enter image description here

換句話說,當我行達到一定的限度,它開始自己!一旦我再次填充同一行,那麼它運行良好,到下一行。

有沒有人看過這個問題呢?你有解決方案嗎?這個問題也發生在iTerm中。

+1

你的語法很殘酷。匆匆一瞥,你沒有硬支架來關閉它(在$之前)。還有其他問題。我建議重新開始。這裏有一個着色指南:http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/ – 2011-09-25 03:25:52

+1

備註:定製提示時,使用'\ $'而不是字面美元符號。 Bash將顯示相應的提示符(普通用戶使用'$',root使用'#')。 –

+0

另一種風格提示:不要硬編碼轉義序列(我意識到大多數人都這樣做,但他們不應該)。相反,使用'tput'爲當前終端發出適當的代碼,以便它適用於各種終端。特別是,如果終端不支持提示中的顏色/樣式,它將不輸出任何內容,而不會輸出可能會影響終端的字符。例如'PS1 ='\ [$(tput setaf 1)\] \ h:\ W \ [$(tput sgr0)\] \ u \ $「'將顯示紅色的主機名和工作目錄。 –

回答

5

這是來自StackOverflow的Mac Terminal.app annoying bug - How to fix it?的副本。問題在於,必須將方括號內的終端控制字符包圍在\[ … \]之內,以便在計算命令提示符的長度時,bash shell不會對它們進行計數。

由於這是一個通用的shell /終端問題,而不是特定於Mac OS X或終端,這應該可能遷移到StackOverflow並重復其他問題。 (但是,我沒有特權要做。)

+3

很好的答案,但我認爲這是可以接受的問題不同,因爲這個問題的Apple用戶不太可能去Stackoverflow的答案 – conorgriffin

相關問題