2012-07-16 103 views
1

在我的mac終端中,按了幾次以查看我之前的命令後,命令卡在終端中。它是這樣的,Mac OS X在按下箭頭之後,終端命令卡住

正常:

[ 10:23:34 ] > MY_COMMAND 

幾次按下了

[ 10:23:34 ] > git commit -mMY_COMMAND 
[ 10:23:35 ] > git commit -mMY_COMMAND 
[ 10:23:36 ] > git commit -mMY_COMMAND 

git commit -m只是卡在那裏,直到之後我輸入端子「清除」。我該如何解決?

+0

你正在使用哪個外殼? shell提示是否包含終端的任何說明?這是否僅發生在非常長的命令中(可能會結束)或全部? – 2012-07-17 02:40:49

+0

使用Bash的Mac OS X終端。每一個長或短的命令都不會發生這種情況。 – 2012-08-06 20:16:50

+0

這是我的。在.bash_profile 出口PATH = $ {PATH}:/用戶/ offirgolan/Android的SDK-的MacOSX /平臺的工具 出口TERM = 「xterm中色」 別名LS = 「LS -G」 出口PS1 =「\ e [1; 30m \] [\ e [1; 30m \] \ e [1; 33m \] \ u @ \ H \ [\ e [1; 32m \] \ w \ [\ e [0m \ [1; 30m \]] \ n [\ [\ e [1; 31m \] \ T [[30m \]]> \ e [37m \] 「 更好的安全 的umask 077 #our默認文本編輯器 #設定的默認文件/目錄創建的保護,可能是Emacs在 出口EDITOR = emacs的 #better尋呼機超過 出口PAGER =少 #St andard backspace stty erase intr – 2012-08-06 20:20:21

回答

1

最可能的原因是格式不正確的PS1提示字符串。當您在提示中放置非打印控制字符時,必須用\[ … \]環繞它們來告訴Bash在計算提示寬度時不計算它們。

如果寬度計算不正確,命令行顯示可能會以多種方式混淆,包括您描述的方式。

在評論你寫道:

這是我的.bash_profile出口PATH = $ {PATH}:/用戶/ offirgolan/Android的SDK-的MacOSX /平臺工具出口TERM =「xterm的色「alias ls =」ls -G「export PS1 =」\ e [1; 30m] [\ e [\ e [1; 30m] \ e [1; 33m] \ u @ \ H [\ e [1; 32m ] \ w [\ e [0m] \ e [1; 30m]] \ n [[\ e [1; 31m] \ T [\ e [0m] \ e [1; 30m]]> 「

看起來你可能打算包括包圍,因爲沒有一家領先的反斜槓所有額外的括號,但它們是不一致的,你的字符串甚至包括像不完整的轉義序列。這很難說,如果有的話,你打算在提示中顯示的支架,以及你希望他們是什麼顏色,但你PS1應該是更像

PS1='\[\e[1;30m\][\[\e[1;30m\e[1;33m\] \[email protected]\H [\[\e[1;32m\] \w\[\e[0m \e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]' 

專業提示:不要硬在你的提示中編碼終端命令 - 它們不可移植,並且不適用於所有終端。相反,請使用tput爲當前終端選擇適當的命令序列。例如

PS1="\[$(tput setaf 1)\]Red Text\[$(tput sgr0)\] \$ " 

將以紅色顯示帶有「紅色文本」的提示符「紅色文本$」。這也使得更容易查看\[ \]括號是否正確,因爲您沒有丟棄字符串的文字轉義字符,助記碼tput使得更容易找出正在發送的命令。