如何自定义你的 "bash prompt"

还在使用bash默认的简陋prompt?试试自定义一个炫酷的prompt!
首先,我们打开 ${HOME}/.bashrc 文件,这个文件会在新建交互式bash进程的时候被调用,我们需要将我们对于prompt修改的shell代码放入里面。
然后,我们了解下bash的prompt的显示原理,prompt的样式由${PS1}变量控制,因此我们就可以修改PS1变量来达到修改bash变量的目的。
但是我们目标是,当命令执行成功时,显示绿色的笑脸符号:D,当命令执行失败时,显示红色的惊恐脸符号:o,如下:

因此我们可以修改生成PS1变量的函数,修改为__prompt_command()这个自定义函数。overload it!

  1. 第一行代码将产生PS1变量的函数替换为__prompt_command,从源头上截胡PS1变量。
  2. 然后是函数内的内容,首先是获取上一个程序运行的返回值,0代表成功,非0代表失败,然后先给PS1变量赋值一个左边的中括号。
  3. 再然后定义了一些颜色变亮,通过返回值来确定后面是红色的符号还是绿色的符号,然后加上显示工作目录的\w转义变量,在加上左括号和$符号,就完成了一个完整的prompt!
# The function to generate $PS1 after CMDs
PROMPT_COMMAND=__prompt_command    # Function to generate PS1 after CMDs
__prompt_command() {
    local EXIT="$?"                # This needs to be first
    PS1="["

    local RCol='\[\e[0m\]'

    local Red='\[\e[0;31m\]'
    local Gre='\[\e[0;32m\]'
    local BYel='\[\e[1;33m\]'
    local BBlu='\[\e[1;34m\]'
    local Pur='\[\e[0;35m\]'

    if [ $EXIT != 0 ]; then
        PS1+="${Red}:o${RCol}"        # Add red if exit code non 0
    else
        PS1+="${Gre}:D${RCol}"
    fi

    PS1+=" \w ]\$ "
}

将上面的代码放入你的.bashrc,就可以看到效果了!注意,这样修改后就不可以通过修改${PS1}变量来修改bash prompt了哦!

2 个赞

好!!!!!!!!