史上最强的PS1

别搞错了, 是Shell的提示符:PS1,不是Play Station One。(-。-)

这个PS1的目前有两个功能:高亮所有不为0的返回值,显示Git分支。

效果如图:

[![Power

PS1](http://farm3.static.flickr.com/2663/3748590133_76799bc5f4.jpg)](http://www.flickr.com/photos/tualatrix/3748590133/ "Flickr 上 TualatriX 的 Power PS1" )

你可以看到,当我在Shell中打"hello"时,在显示了"command not found"以外,还把Shell的PS1提示符弄红了,在前面还有返回值:127。方便了在发生错误的情况下得到注意。

此外,作为一个Git用户,当进入一个Git仓库时,会用灰底黄字显示当前的分支信息,一目了然。

实在是方便!PS1也能加入超多的功能!

当然这些都不是原创的,只是稍微改了下,是向bones7456和[albert](http://cookinglinux.cn

/shell-prompt-git.html)学的。

下面就是这个PS1,很晕吧:PS1='a=$?;if [ $a -ne 0 ]; then echo -n -e "\\[\e[01;32;41m\\]{$a}"; fi\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\Wb=$(parse_git_branch); if [ x"$b" != "x" ]; then echo -n -e "\\[\e[33;40m\\](branch:$b)\\[\033[01;32m\\]\\[\e[00m\\]"; fi\[\033[01;34m\] $ \[\e[00m\]'

如果你也想用的话,从我的Git仓库中,取出样本,放进你的~/.bashrc里吧。记得不要少了parse_git_branch这个函数。

http://github.com/tualatrix/configs/tree/master

<推广> 本站架设于 Linode 东京机房,同时使用 云梯 进行科学上网

» You can leave a comment.

19 Comments

  1. 哈哈..拿来主义..赶紧偷来用了

  2. 最短的 PS1:PS1='[\[\033[0;34m\]\u\[\033[0;35m\]@\[\033[0;33m\]\w\[\033[00m\]]$ '

  3. 我的也好短……'\[\e[2;32m\]\u\[\e[2;34m\] >> \[\e[0m\]\[\e]2;\w\a\]'

  4. 很有前途的ps1啊,我还是短短的用

  5. 这样搞得提示符太长了 -_-!!

  6. 幽隱之賢

    Gentoo 的已經很不錯了,而且很長會讓人很噁心的……

  7. cbkid

    都贴了...ubuntu最近几不去了...只记得效果
    [dir] 黄色为普通用户 红色为root

  8. doylecnn

    在cygwin下使用成功
    但是在cygwin下的screen中使用时失败
    sh: parse_git_branch: command not found
    sh: [: 244=: binary operator expected

    要怎么解决呢

  9. zer4tul

    赞……用之。

  10. 我的就只是黑屏白字

  11. Dig

    BLUE="\[\033[0;34m\]"
    DARK_BLUE="\[\033[1;34m\]"
    RED="\[\033[0;31m\]"
    DARK_RED="\[\033[1;31m\]"
    NO_COLOR="\[\033[0m\]"
    PS1='`RET=$?; if [ $RET -ne 0 ]; then echo -n -e "\[\033[01;33;41m\]{$RET}\[\033[0;0m\]"; fi`'"$DARK_BLUE${debian_chroot:+($debian_chroot)}\u@\h$NO_COLOR:$RED\w\$NO_COLOR"

    原来只在ubuntu 904上改了颜色,今天才又加了返回值

  12. 太长了。。。。。
    我宁愿短一点。或者用zsh,然后上面加一个框。嘿嘿。

  13. 赞一个,用用。

  14. &#39;\[\033[01;34m\]\W&#39;&#39;\[\e[33;40m\]$(__git_ps1 &quot;(%s)&quot;)\[\033[01;32m\]\[\e[00m\]&#39;&quot; \$ &quot;

    用 git-completion.sh 获取分支名字更简单。

    • bopro

      你这个相当好呀。我看着很舒服哦,就是找这样的。git-completion.sh比'\[\033[01;34m\]\W''\[\e[33;40m\]$(__git_ps1 "(%s)")\[\033[01;32m\]\[\e[00m\]'" \$ " 这个好在哪呢?

  15. swordless

    楼主有礼了,请教一下博客用的什么主机,我用的byethost的空间但是现在被墙了正想换地方~~

  16. small fish

    找不到parse_git_branch,直接执行PS1=&#39;`a=$?;if [ $a -ne 0 ]; then echo -n -e &quot;\[\e[01;32;41m\]{$a}&quot;; fi`\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\W`B=$(git branch 2&gt;/dev/null | sed -e &quot;/^ /d&quot; -e &quot;s/* \(.*\)/\1/&quot;); if [ &quot;$B&quot; != &quot;&quot; ]; then S=&quot;git&quot;; elif [ -e .bzr ]; then S=bzr; elif [ -e .hg ]; then S=&quot;hg&quot;; elif [ -e .svn ]; then S=&quot;svn&quot;; else S=&quot;&quot;; fi; if [ &quot;$S&quot; != &quot;&quot; ]; then if [ &quot;$B&quot; != &quot;&quot; ]; then M=$S:$B; else M=$S; fi; fi; [[ &quot;$M&quot; != &quot;&quot; ]] &amp;&amp; echo -n -e &quot;\[\e[33;40m\]($M)\[\033[01;32m\]\[\e[00m\]&quot;`\[\033[01;34m\] $ \[\e[00m\]&#39;效果也是一样的

Leave a Comment