2

在我的 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只是卡在那里,直到我在终端中输入“清除” 。我该如何解决?

4

1 回答 1

2

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

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

你在评论中写道:

这是我的 .bash_profile export 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\]'

专业提示:不要在提示符中对终端命令进行硬编码——它们不可移植,并且不适用于所有终端。相反,使用tput为当前终端选择适当的命令序列。例如

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

将显示提示“Red Text $”,其中“Red Text”为红色。这也使查看\[ \]括号是否正确变得更加容易,因为您没有乱扔字符串的文字转义字符,并且助记符tput可以更容易地找出正在发送的命令。

于 2015-12-16T13:04:50.800 回答