BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令

BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令

BASH的PS1变控制提示符相关的东西,善用它可以让BASH用起来舒服很多。

  • 提示符颜色
  • 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色

你有没有遇到过,打开了很多个终端窗口,分不清哪个用于哪个?同样是通过PS1可以做到

  • 终端窗口标题显示当前目录
  • 终端窗口标题显示当前正在执行的命令

效果图:
在这里插入图片描述

  1. 提示符前面的( 0)是上一个命令的返回值。
  2. 第二个数字是当前BASH进程的PID。
  3. 窗口标题显示有当前目录,和终端类型。
  4. 当有命令在执行时,窗口标题显示正在执行的命令
    在这里插入图片描述
  5. exit code正常返回0,显示白色,若非0显示红色
    在这里插入图片描述

实现方法

代码放入~/.bashrc中,BASH启动时会执行。

首先准备不可打印字符

np1="\[" #不可打印字符开始
np2="\]" #不可打印字符结束

准备颜色

c0="$np1""\e[0m""$np2" #默认颜色
c1="$np1""\e[0;92m""$np2" #绿
c2="$np1""\e[1;93m""$np2" #黄 加粗
c3="$np1""\e[0;91m""$np2" #红
c4="$np1""\e[0;93m""$np2" #黄

颜色值可以去查相应的表。

提示符要显示的一般内容

h1="$$-\u@\h:"    # PID-用户名@机器名:
h2="\w "     # pwd
h3="\$ "     # $

给它们配上颜色放入提示符中

PS1="${c1}${h1}${c2}${h2}${c3}${h3}${c0}"

上一个命令的返回值

"\$(LEC=\$? ; if [[ \$LEC -ne 0 ]]; then  echo -n '\[\e[0;91m\]' ; fi ; printf \"(%3d)\" \$LEC) "

$?取得上一个命令的返回值。这条总体有点复杂,里面包含了多条语句,包含了对值的判断以决定颜色。注意BASH中单引号引起来的字符串是不能使用转义字符的。

终端窗口标题显示当前目录

if [[ $TERM =~ "xterm" ||  $TERM =~ "rxvt" ]]; then  #先判断一下终端类型,也可以不判断
    t1="\e]0;"
    t2="\w"               # pwd
    t3=" 终端 $TERM"      #终端类型
    t4="\a"
fi

放入PS1

"${np1}${t1}${t2}${t3}${t4}${np2}"

终端窗口标题显示当前存在执行的命令

trap 调试命令 DEBUG设置在执行命令时,自动执行的调试命令,以设置窗口标题为${BASH_COMMAND}

if [[ $TERM =~ "xterm" ||  $TERM =~ "rxvt" ]]; then
    trap 'echo -ne "\033]0;" ; echo -n "${BASH_COMMAND}" ; echo -ne "  正在执行\007" > /dev/stderr' DEBUG
fi

将以上所述结合起来,放入~/.bashrc中就可以实现开头描述的所有功能啦!

结合后的代码见文末的附录

打赏作者

写作不易,感谢支持!

打赏二维码

附录

np1="\[" #不可打印字符开始
np2="\]" #不可打印字符结束

c0="$np1""\e[0m""$np2" #默认颜色
c1="$np1""\e[0;92m""$np2" #绿
c2="$np1""\e[1;93m""$np2" #黄 加粗
c3="$np1""\e[0;91m""$np2" #红
c4="$np1""\e[0;93m""$np2" #黄

h1="$$-\u@\h:" # PID-用户名@机器名:
h2="\w "  # pwd
h3="\$ "  # $

if [[ $TERM =~ "xterm" ||  $TERM =~ "rxvt" ]]; then
    # 平时不执行命令时的标题
    t1="\e]0;"
    t2="\w" # pwd
    t3="   终端  $TERM"    # 终端类型
    t4="\a"
fi

PS1="${np1}${t1}${t2}${t3}${t4}${np2}\$(LEC=\$? ; if [[ \$LEC -ne 0 ]]; then  echo -n '\[\e[0;91m\]' ; fi ; printf \"(%3d)\" \$LEC) ${c1}${h1}${c2}${h2}${c3}${h3}${c0}"

if [[ $TERM =~ "xterm" ||  $TERM =~ "rxvt" ]]; then
    trap 'echo -ne "\033]0;" ; echo -n "${BASH_COMMAND}" ; echo -ne "  正在执行\007" > /dev/stderr' DEBUG
fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值