当循环输入到控制台的语句时,我偶尔会发现我输入的文本没有刷新,提示被移到右边。
我原来的预期提示: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变量。 (你可以看到我尝试了几种不同的方法。)根据我所读到的,我正确使用了颜色代码。
任何帮助都会很棒。感谢。
答案 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。
我也只是复制并粘贴带有转义字符的行并修改它们(注意它们与文字表示不同)