为什么这个bash提示行为奇怪/消失,我该如何修复它(OS X)?

Dav*_*ith 11 macos bash shell prompt

我承认我使用了一个冗长的bash提示:

--(username)-(Wed April 01|12:00:00)--(~ $
Run Code Online (Sandbox Code Playgroud)

最近,我有了明智的想法来改变它,以便取决于前一个命令的退出值,如果成功,()的内部元素将是绿色,如果失败,它们将是红色.我在大多数情况下工作(一些奇怪的退出状态会将颜色更改为其他东西,但我没关系),但是当输入多于一行的命令并导致终端滚动时,提示消失了!当没有颜色时我的提示工作正常,所以我猜它与我的颜色逃逸有关,特别是我的未关闭[但是我不能把它钉死.

#.profile
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Cha*_*ens 35

听起来应该可以解决你的问题.

这似乎对我有用*:

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ '
Run Code Online (Sandbox Code Playgroud)

*好吧,真的export PS1='\u@\h:\w\$ '对我有用

要引用链接的帖子,答案在于在PS1声明中的所有颜色序列周围添加\ [和\]:

在我获得PS1的以下值之前:

'\ e [0; 34m\h:\ w [!]\$\e [0m'

这给了我一个很好的以下形式的蓝色提示

hostname:working-directory [command-number] $

但是,我遇到了同样的换行问题.修复是在ANSI转义周围插入\ [和\],以便shell知道不要将它们包含在换行计算中.这导致PS1的以下值:

'\ [\ e [0; 34m \]\h:\ w [!]\$\[\ e [m \]'

  • Chas,只是看着那个提示让我的眼睛发红.谢谢你的帮助,先生!你的是唯一似乎完全有效的解决方案. (2认同)

lhu*_*ath 6

http://mywiki.wooledge.org/BashFAQ/053 - 我有一个花哨的颜色提示,现在bash似乎不知道我的终端有多宽.线条缠绕不正确.

顺便说说; 供你参考; 这是我的PS1看起来像这样: alt text http://lhunath.lyndir.com/stuff/PS1.png

\[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]
Run Code Online (Sandbox Code Playgroud)

请注意我如何将所有颜色代码放入$parameters使其更整洁,但更重要的是,因为您应该使用它tput来生成它们.看到:

http://mywiki.wooledge.org/BashFAQ/037 - 如何以各种颜色打印文本?

我在一个实用程序脚本中声明我的颜色参数,该脚本由~/.bashrc(以及我编写的任何脚本)来源调用bashlib.

最后一点; 把你的PS1定义放在里面~/.bashrc而不是export它.绝对没有理由将你的PS1定义添加到从shell生成的任何和所有进程的环境中.