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}"

上一个命令的返回值

last_exit_code="\$(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

提示符生成的时间

prompt_time="\$(date +%H:%M:%S) "

完整代码

将以上所述结合起来,放入~/.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
last_exit_code="\$(LEC=\$? ; if [[ \$LEC -ne 0 ]]; then echo -n '\[\e[0;91m\]' ; fi ; printf \"(%3d)\" \$LEC) "
prompt_time="\$(date +%H:%M:%S) "

PS1="${np1}${t1}${t2}${t3}${t4}${np2}${last_exit_code}${c0}${prompt_time}${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

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

  1. (转)函数中使用 ajax 异步 同步 返回值错误 主函数显示返回值总是undefined -- ajax使用总结

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAAE0CAIAAAB7LwoKAAAgAElEQVR4nO2dy6sc152A6+/R2mXwSn ...

  2. Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量

    我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...

  3. Shell $?获取函数返回值或者上一个命令的退出状态

    Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...

  4. Shell入门教程:Shell函数的返回值

    shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...

  5. [转]Linux命令的返回值

    Linux命令的返回值 对于某些监测脚本和探测命令蛮有用的: 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称 ...

  6. linux命令执行返回值(附错误对照表)

    转自:http://blog.sina.com.cn/s/blog_6739945f0100zt4b.html 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结 ...

  7. 转载:as3.0下对象类型返回值与变量默认值的详细说明

    转自:http://www.cuplayer.com/player/PlayerCodeAs/2012/0905367.html Null.NaN.undefined 及各自应用对象:变量的默认值: ...

  8. jQuery中$.getJSON的返回值问题

    在使用$.getJSON获得数据库的返回值后,想将该值return传给其他函数.结果遇到问题. $.getJSON(url, data, function(result) { return resul ...

  9. C#调用存储过程带输出参数或返回值

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...

随机推荐

  1. 11.QT-ffmpeg+QAudioOutput实现音频播放器

    1.前言      由于QAudioOutput支持的输入数据必须是原始数据,所以播放mp3,WAV,AAC等格式文件,需要解封装后才能支持播放.      而在QT中,提供了QMediaPlayer ...

  2. robotframework运行时后台报错UnicodeDecodeError,无日志输出

    解决办法: 1.找到对应位置的testrunner.py文件,修改字符集为GBK 2.删除同级目录下的testrunner.pyc 3.重启ride

  3. db2错误代码可能的原因

    一. SQL5005C运行cmd未用管理员权限打开 SQLCODE-303  数据类型不兼容 SQLCODE-305   查出的数据有NULL未处理直接写入接收变量 二.应该不会有人直接写sql用这个 ...

  4. Jack Straws(POJ 1127)

    原题如下: Jack Straws Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5555   Accepted: 2536 ...

  5. python实例基础(慢慢补充)

    1.有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 2.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立 ...

  6. 计算几何(一):凸包问题(Convex Hull)

    引言 首先介绍下什么是凸包?如下图: 在一个二维坐标系中,有若干点杂乱排列着,将最外层的点连接起来构成的凸多边型,它能包含给定的所有的点,这个多边形就是凸包. 实际上可以理解为用一个橡皮筋包含住所有给 ...

  7. Java Web学习(十一)Java过滤器

    一.引言 上一篇文章学习了java三大器的拦截器,拦截器主要是针对于action请求进行拦截处理的,那么对于requst的一些信息如果在调用前,想先进行过滤和处理,那么就要使用到第二个神器,也就是本文 ...

  8. POI和easyExcel

    POI与easyExcel 这个东西一般用来做什么? 将用户信息导出为Excel表格(导出数据) 将Excel表中的信息录入到网站数据库(比如一些习题上传) 在开发过程中会遇到对Excel的处理,比如 ...

  9. Go-missing return at end of function

    where? Go程序中函数在执行的时候 why? 函数有返回参数,但是函数没有return关键字,报错 way? 添加return返回函数需要返回的参数

  10. mysql-8-subquery

    #进阶8:子查询 /* 出现在其他语句中的select语句(嵌套) 分类: 按子查询出现的位置: SELECT 后面 FROM 后面 WHERE 或 HAVING 后面 EXISTS后面 */ USE ...