Shell提示行换行问题

时间:2009-07-15 18:15:28

标签: bash colors prompt ansi-escape

我已经做了一些事情来破坏OS X(10.5.7)终端中的Bash Shell提示符。

这是我配置的PS1:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '

据我所知,我有正确的颜色命令逃逸。然而,当我在命令历史中向上和向下滚动时,如果历史命令包裹在多行上,我经常会遇到换行问题。

我将提示简化为以下内容:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '

我仍然看到类似的东西:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7
5F5-4c91-89C4-3656F6E                                           export PS1="\[
\e[1;32m\]\h\[\e[0m\]:                                          cd Library/Appl
ication\ Support/

我也尝试过\033而不是\e。我刚刚将PS2包含在那里以获取信息,我没有从安装默认值中更改它。如果我完全删除颜色代码,那么一切正常,任何想法?

9 个答案:

答案 0 :(得分:48)

我现在正在使用这个PS1效果很好:

green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "

滚动浏览我的命令历史记录似乎现在处理换行。但是在此期间,由于这个问题被问到,我还将OS X更新为10.6.3

答案 1 :(得分:20)

This stackoverflow thread似乎相关。正如该线程中提到的那样,Bash FAQ at mywiki.wooledge.org讨论了如何在Bash提示(FAQ 53)中正确引用颜色代码,以及正确调用终端颜色(FAQ 37)。

答案 2 :(得分:4)

Bash中的换行问题并不新鲜。请查阅邮件列表,也许还有另外一个错误。

除了标记不可打印的字符外,您不能做更多的事情,其余的必须通过提示代码来完成。

答案 3 :(得分:1)

您似乎已正确转义并附上序列。

我使用的解决方法无论如何都要在最后添加'\ n'。我发现它更清晰,减少了包装问题的任何问题。我的PS1的确切结束是:

'\n\[\033[0;30m\]$\[\033[0m\]

你可能知道的优秀方法:

Bash prompt howto

答案 4 :(得分:1)

这是我的:这是我发现的最好的,但我最初发现它的网站缺少一个转义字符,导致换行问题。我修补它,最后让它工作。它以色彩方式显示您的用户,路径和分支信息,具有良好的对比度。

export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$'

另外,添加

GIT_PS1_SHOWDIRTYSTATE=true

在分支“脏”时显示标记(存在要提交的更改)

export HISTCONTROL=ignoredups

向上滚动bash历史记录时忽略重复项也很有用。

bind "set completion-ignore-case on" 

也有帮助。

最后,

shopt -s checkwinsize

如果问题仍然存在,可能会对OSX有所帮助。

答案 5 :(得分:1)

我注意到即使PS1PROMPT环境变量中没有特殊字符,提示光标定位也存在一些问题。

如果我们输出一个末尾没有行尾字符的文件。它会混淆提示。

您可以通过执行以下操作重现:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

并多次按下向上键,您将看到提示混淆。

您可以在行动中看到此示例:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

发生这种情况时,只需按<CTRL-C>,提示将恢复正常。

请注意,ZShell没有此问题。

答案 6 :(得分:0)

为了将来参考,这就是我使用的:

export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "

这会将我的shell提示符显示为:

[ec2-user@Project:~]$

帮助我区分live和dev网站。

答案 7 :(得分:0)

'shopt -s checkwinsize'也适用于Cygwin包装问题

答案 8 :(得分:0)

如果你正在使用标题栏技巧"\e]2;titlebar\a",请确保也逃脱:"\[\e]2;titlebar\a\]"