OS X终端中的Bash提示损坏

时间:2020-03-06 14:27:44  来源:igfitidea点击:

我在os X Terminal应用程序中使用bash,当我滚动历史记录时,我的自定义$ PS1中断了。

PS1="${BLUE}\u${CYAN}@${RED}\h${BLUE}\w\n\[${red}$${NC}\]"

也尝试过
PS1 =" $ {BLUE} \ u $ {CYAN} @ $ {RED} \ h $ {BLUE} \ w \ r \ n [$ {red} \ $$ {NC}]"

问题似乎在换行符中。我已经在Slackware no prob上使用了这个bash提示。

解决方案

如果问题似乎出在换行符上,请尝试将\ r \ n而不是仅放在\ n上,以查看是否有区别。

我在PS1上遇到了同样的问题(在OS X上)。
如果我删除\ [\]

PS1="${BLUE}\u${CYAN}@${RED}\h${BLUE}\w\n${red}$${NC}"

这很好。需要方括号吗?我从未使用过它们,但是从文档中可以看到:

\[
      Begin a sequence of non-printing characters. This could be used to
  embed a terminal control sequence into
  the prompt. 
  
  \]
      End a sequence of non-printing characters.

我现在尝试了

PS1="${BLUE}\u${CYAN}@${RED}\h${BLUE}\w${RED}\r\n$\[${blue}\]"

哪个似乎有效
使先前的命令起作用所需的括号。

每个转义序列都需要[和]。 $ BLUE之类的东西包括这些吗?如果没有,则需要将它们与这些电话括起来。

为了避免我们提示需要逃避的"逃避"困难变得更加复杂,这应该是开始发展的基础:

function _my_prompt ()
{ 
  # magic goes here
  my_prmpt=.... 
}
PROMPT_COMMAND='_my_prompt'
PS1="[$my_prmpt] $"

登录远程(Debian)系统时遇到同样的问题。由于.bashrc中所有的转义值都用括号括起来,因此我进行了一些谷歌搜索,发现原因可能是本地和远程系统上的窗口大小不同。新增中

shopt -s checkwinsize

远程系统上的.bashrc修复了我的问题。

来源:http://forums.macosxhints.com/showthread.php?t = 17068