我在 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 上使用过这个 bash 提示,没有问题。
每个转义序列都需要 [ 和 ] ;$BLUE 之类的是否包括这些?如果没有,它们需要被这些调用括起来。
为了避免这种“逃避”困难,因为你提示需要进化得更复杂,这应该是一个开始成长的骨架:
function _my_prompt ()
{
# magic goes here
my_prmpt=....
}
PROMPT_COMMAND='_my_prompt'
PS1="[\$my_prmpt] \$"
登录远程(debian)系统时,我遇到了同样的问题。由于 .bashrc 中的转义值都被很好地括起来了,我做了一些谷歌搜索,发现原因可能是本地和远程系统上的窗口大小不同。添加
shopt -s checkwinsize
到远程系统上的 .bashrc 为我解决了这个问题。
如果问题似乎出在换行符上,请尝试使用 \r\n 而不是 \n 并查看它是否有所作为。
我在你的 PS1 上遇到了同样的问题(在 OS X 上)。如果我删除\[
和\]
PS1="${BLUE}\u${CYAN}@${RED}\h${BLUE}\w\n${red}\$${NC}"
这很好用。需要方括号吗?我从未使用过它们,但来自文档:
\[
开始一系列非打印字符。这可用于将终端控制序列嵌入到提示中。
\]
结束一系列非打印字符。
我现在已经尝试过
PS1="${BLUE}\u${CYAN}@${RED}\h${BLUE}\w${RED}\r\n\$\[${blue}\]"
这似乎有效 使以前的命令起作用所需的括号。