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

Macos PS1中的什么导致我的Terminal.app命令卡在屏幕上?,macos,bash,terminal,Macos,Bash,Terminal,在循环查看输入到控制台的语句时,我偶尔会发现输入的文本没有刷新,提示被移到右侧 我的原始、预期提示: 点击上下箭头十几次后会发生什么: 如果屏幕截图不清晰,带下划线的文本(在本例中为“vim~/.bas”)将“添加”到提示中。我不能删除它。但是,如果我尽可能多地删除,清除提示后的任何文本,然后按Enter键,我会再次收到干净的原始提示: 下面是~/.bash\u配置文件包含的内容: # Simpler bash prompt in Terminal.app promptColor="\e[1;3

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

我的原始、预期提示:

点击上下箭头十几次后会发生什么:

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

下面是
~/.bash\u配置文件
包含的内容:

# 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变量。(你可以看到我尝试了几种不同的方法。)根据我所读的,我正确地使用了颜色代码

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

我想你想要:

promptColor='\e[1;34m'
endColor='\e[m'
export PS1="$promptColor"'\w$ '"$endColor"
(注意从双引号到单引号的所有细微变化)

问题在于,当需要显式解释时,bash正在对以下内容进行扩展:

  • \e[1;34m
  • \w$
  • \e[m
单引号和双引号在shell中的含义不同:


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

这就是。为了让Bash能够正确计算提示符的显示长度,任何非打印序列(如颜色代码)都需要在
\[…\]中
sequence.

当我循环执行一个太长而不能放在一行上的命令时,这种情况经常发生。顺便说一句,在gnome终端中。我担心这会导致同样的问题。谢谢。我读了那一页,但由于没有其他地方提到额外的转义,所以我忽略了它们。我想我不应该这样做。;-)