按向上箭头后Mac OS X终端命令卡住

时间:2012-07-16 17:32:58

标签: macos terminal

在我的mac终端中,在按下几次以查看我之前的命令后,命令卡在终端中。它就是这样的,

正常:

[ 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只是卡在那里,直到我在终端输入'clear'。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

最可能的原因是格式不正确的PS1提示字符串。当您在提示中放入非打印控制字符时,必须用\[ … \]将它们包围起来,以告诉Bash在计算提示的宽度时不计算它们。

如果宽度计算不正确,命令行显示可能会以多种方式搞乱,包括您描述的方式。

在你写的评论中写道:

  

这是我的.bash_profile导出PATH = $ {PATH}:/ Users / offirgolan / android-sdk-macosx / platform-tools export TERM =“xterm-color”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]]> \ e [37m]“

看起来您可能打算包括包围,因为所有额外的括号没有前导反斜杠,但它们不一致,并且您的字符串甚至包含不完整的转义序列,如\e[\e[。很难说出你打算在提示中显示哪些括号,以及你想要的颜色,但你的PS1应该更像是

PS1='\[\e[1;30m\][\[\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\] ] > \[\e[37m\]'

Pro-Tip:请勿在提示中硬编码终端命令 - 它们不可移植,不适用于所有终端。而是使用tput为当前终端选择适当的命令序列。例如

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

将以红色显示提示“Red Text $”和“Red Text”。这也使得查看\[ \]括号是否正确变得容易得多,因为您没有乱丢字符串的文字转义字符,并且助记符tput代码可以更容易地找出哪些命令是被送了。