代码之家  ›  专栏  ›  技术社区  ›  eric.frederich

bash ps1中的动态元素

  •  5
  • eric.frederich  · 技术社区  · 16 年前

    我在~/.localsh文件中放置了以下内容,以便在使用git时自定义bash提示。

    基本上,我想在终端中显示当前的分支。 Gitk工具显示绿色背景和黑色前景的分支,所以这就是我要做的。

    我的功能正常,但是当我按下键盘上的向上箭头,在以前的命令中向后滚动时,它会被覆盖。

    这是以前的事,当你不结束一个颜色序列与[\e[0米]。 现在发生在我身上是因为调用了getgitbranch函数。我认为这与终端不知道提示有多长有关。

    所以,问题是… 如何在bash提示中正确地使用动态元素,并且在使用向上箭头时不将其连接起来?

    function getgitbranch()
    {
    git branch | grep "^\*" | cut -c3-
    }
    
    function blabla()
    {
    PS1=""
    PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
    PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
    PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
    PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
    PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
    export PS1
    }
    
    1 回复  |  直到 16 年前
        1
  •  5
  •   Dennis Williamson    16 年前

    移除 \[\] 从周围 $(getgitbranch) . 该函数输出的字符实际上占用了屏幕上的空间,因此您希望bash能够解释这些字符。使用 \[\] 不要 计算出现在中的字符数。

    推荐文章