还在使用bash默认的简陋prompt?试试自定义一个炫酷的prompt!
首先,我们打开 ${HOME}/.bashrc
文件,这个文件会在新建交互式bash进程的时候被调用,我们需要将我们对于prompt修改的shell代码放入里面。
然后,我们了解下bash的prompt的显示原理,prompt的样式由${PS1}
变量控制,因此我们就可以修改PS1变量来达到修改bash变量的目的。
但是我们目标是,当命令执行成功时,显示绿色的笑脸符号:D
,当命令执行失败时,显示红色的惊恐脸符号:o
,如下:
因此我们可以修改生成PS1变量的函数,修改为__prompt_command()
这个自定义函数。overload it!
- 第一行代码将产生PS1变量的函数替换为
__prompt_command
,从源头上截胡PS1变量。 - 然后是函数内的内容,首先是获取上一个程序运行的返回值,0代表成功,非0代表失败,然后先给PS1变量赋值一个左边的中括号。
- 再然后定义了一些颜色变亮,通过返回值来确定后面是红色的符号还是绿色的符号,然后加上显示工作目录的
\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了哦!