【问题标题】:Why is this bash prompt acting strangely/disappearing, and how do I fix it (OS X)?为什么这个 bash 提示行为奇怪/消失,我该如何修复它(OS X)?
【发布时间】:2010-10-16 22:40:33
【问题描述】:

我承认我使用了有点冗长的 bash 提示符:

--(username)-(Wed April 01|12:00:00)--(~ $

最近,我有了一个好主意,将其更改为根据上一个命令的退出值,如果成功,则 () 的内部元素将是绿色的,如果失败,它们将是红色的。我得到它的大部分工作(一些奇怪的退出状态会将颜色更改为其他颜色,但我可以接受),但是当输入一个多于一行的命令并导致终端滚动时,提示消失!当没有颜色时,我的提示运行良好,所以我猜这与我的颜色转义有关,尤其是我未闭合的 [,但我无法确定它。

#.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 \$ '

提前致谢!

【问题讨论】:

    标签: bash macos shell prompt


    【解决方案1】:

    听起来this 应该可以解决您的问题。

    这似乎对我有用*:

    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\] \$ '
    

    * 好吧,真的 export PS1='\u@\h:\w\$ ' 适合我

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

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

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

    这给了我以下形式的漂亮蓝色提示

    主机名:工作目录[命令号]$

    但是,我遇到了与您相同的换行问题。解决方法是在 ANSI 转义符周围插入 \[ 和 \],以便 shell 知道不将它们包含在换行计算中。这导致 PS1 的值如下:

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

    【讨论】:

    • 查斯,光是看到那个提示就红了眼眶。谢谢你的帮助,先生!您的解决方案似乎是唯一可行的。
    • 在更改提示颜色后(在 Linux 中,而不是 OSX 中),我无法在历史记录中向后搜索。这解决了我的问题。谢谢!
    【解决方案2】:

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

    顺便说一句;供你参考;这是我的PS1,看起来像这样:
    (来源:lyndir.com

    \[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]
    

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

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

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

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

    【讨论】:

      【解决方案3】:

      您似乎只是缺少转义符周围的开始和结束括号(在第一个 '\e' 之前和最后一个 'm' 之后):

      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\] \$ '
      

      如前所述,PS1 var 不需要导出:只有您的 shell 需要看到它。

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 2016-04-17
        • 2014-02-03
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 2020-06-05
        • 2020-12-27
        相关资源
        最近更新 更多