PS1中的什么导致我的Terminal.app命令卡在屏幕上?

时间:2012-12-03 20:22:54

标签: macos bash terminal

当循环输入到控制台的语句时,我偶尔会发现我输入的文本没有刷新,提示被移到右边。

我原来的预期提示:http://cl.ly/image/04080N260L1V

点击向上和向下箭头大约十几次后会发生什么:http://cl.ly/image/1n3S2K31340R

如果屏幕截图不清晰,带下划线的文本(在本例中为“vim ~/.bas”)将被“添加”到提示中。我无法将其删除。但是,如果我尽可能多地删除,在提示后清除任何文本,然后按Enter键,我再次收到干净的原始提示:http://cl.ly/image/2O1h1Z2y0n2I

以下是~/.bash_profile包含的内容:

# Simpler bash prompt in Terminal.app
promptColor="\e[1;34m"
endColor="\e[m"
#export PS1='\e[0;36m\w$ \e[0m'
export PS1="$promptColor\w$ $endColor"

# Syntax highlighting for commands like `ls` and such
alias ls="ls -G"

# PATH ammendment to put Homebrew-installed apps in front of system-provided ones
homebrew=/usr/local/bin:/usr/local/sbin:/usr/local/share/npm/bin
export PATH=$homebrew:$PATH

我已将罪魁祸首缩小到PS1变量。 (你可以看到我尝试了几种不同的方法。)根据我所读到的,我正确使用了颜色代码。

任何帮助都会很棒。感谢。

2 个答案:

答案 0 :(得分:2)

这是a FAQ。为了使Bash能够正确计算提示的显示长度,任何非打印序列(如颜色代码)都必须位于\[...\]序列内。

答案 1 :(得分:0)

我想你想要:

promptColor='\e[1;34m'
endColor='\e[m'
export PS1="$promptColor"'\w$ '"$endColor"

(注意从双引号到单引号的所有细微变化)

问题是bash在需要明确解释时会对以下内容进行扩展:

  • \e[1;34m
  • \w$
  • \e[m

单引号和双引号表示shell中的不同内容:Strong Quoting vs. Weak Quoting

我也只是复制并粘贴带有转义字符的行并修改它们(注意它们与文字表示不同)