3

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

我最初的预期提示: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 变量。(您可以看到我已经尝试了几种不同的方法。)根据我所阅读的内容,我正确使用了颜色代码。

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

4

2 回答 2

2

这是一个常见问题解答。为了让 Bash 能够正确计算提示的显示长度,任何非打印序列(例如颜色代码)都需要在\[...\]序列内。

于 2012-12-03T20:33:37.750 回答
0

我想你想要:

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

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

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

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

单引号和双引号在 shell 中表示不同的含义:强引用与弱引用

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

于 2012-12-03T20:27:24.567 回答