40

我已经做了一些事情来打破我在 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/扩展/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7
5F5-4c91-89C4-3656F6E 出口 PS1="\[
\e[1;32m\]\h\[\e[0m\]: cd 库/Appl
阳离子\支持/

我也试过\033代替\e. 我只是将 PS2 包含在其中以获取信息,我没有更改安装默认值。如果我完全删除颜色代码,那么一切正常,有什么想法吗?

4

9 回答 9

50

我现在用这个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

于 2010-05-05T14:40:34.983 回答
21

这个stackoverflow线程似乎很相关。正如有人在该线程中指出的那样,mywiki.wooledge.org 上的 Bash FAQ讨论了如何在 Bash 提示中正确引用颜色代码(FAQ 53),以及正确调用终端颜色(FAQ 37)。

于 2010-04-28T21:43:54.703 回答
8

Bash 中的换行问题并不是什么新鲜事。您PS1应该按原样工作,但 Bash 3.2.49 中有一个错误。查阅邮件列表,还有另一个关于此的错误确认已在 4.0 中修复

\[您只能用and标记不可打印的字符\],其余的必须由提示代码完成。

于 2009-07-15T20:16:02.093 回答
2

看来您已经正确地转义和封闭了序列。

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

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

你可能知道的一个很好的方法:

Bash 提示操作方法

于 2009-07-16T14:19:52.517 回答
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 有帮助。

于 2013-01-20T20:54:39.217 回答
1

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

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

您可以通过执行以下操作来重现此内容:

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

并多次按向上键,您会看到提示变得混乱。

你可以看到一个这样的例子:

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

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

请注意,ZShell 没有此问题。

于 2016-01-26T14:56:46.057 回答
0

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

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

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

[ec2-user@Project:~]$

帮助我区分实时站点和开发站点。

于 2012-12-04T00:16:17.207 回答
0

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

于 2014-03-03T17:51:30.107 回答
0

如果您正在使用标题栏技巧"\e]2;titlebar\a",请确保也将其转义:"\[\e]2;titlebar\a\]"

于 2015-11-12T07:55:37.120 回答