2012-07-16 281 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使得更容易找出正在发送的命令。