BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令
BASH的PS1
变量控制提示符相关的东西,善用它可以让BASH用起来舒服很多
- 提示符颜色
- 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色
- 提示符生成的时间(这样就知道上一条命令是什么时候执行完成的,执行时间长的任务时有用)
你有没有遇到过,打开了很多个终端窗口,分不清哪个用于哪个?同样是通过PS1
可以做到
- 终端窗口标题显示当前目录
- 终端窗口标题显示当前正在执行的命令
效果图(不含时间):
- 提示符前面的
( 0)
是上一个命令的返回值。 - 第二个数字是当前BASH进程的PID。
- 窗口标题显示有当前目录,和终端类型。
- 当有命令在执行时,窗口标题显示正在执行的命令
- 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提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令的更多相关文章
- (转)函数中使用 ajax 异步 同步 返回值错误 主函数显示返回值总是undefined -- ajax使用总结
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAloAAAE0CAIAAAB7LwoKAAAgAElEQVR4nO2dy6sc152A6+/R2mXwSn ...
- Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量
我自己接触Linux主要是大学学习的Turbolinux --> 根据<鸟哥的Linux私房菜:基础篇>(第三版) --> 马哥的就业班课程.给我的感觉是这些课程对于bash的 ...
- Shell $?获取函数返回值或者上一个命令的退出状态
Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...
- Shell入门教程:Shell函数的返回值
shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...
- [转]Linux命令的返回值
Linux命令的返回值 对于某些监测脚本和探测命令蛮有用的: 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称 ...
- linux命令执行返回值(附错误对照表)
转自:http://blog.sina.com.cn/s/blog_6739945f0100zt4b.html 在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结 ...
- 转载:as3.0下对象类型返回值与变量默认值的详细说明
转自:http://www.cuplayer.com/player/PlayerCodeAs/2012/0905367.html Null.NaN.undefined 及各自应用对象:变量的默认值: ...
- jQuery中$.getJSON的返回值问题
在使用$.getJSON获得数据库的返回值后,想将该值return传给其他函数.结果遇到问题. $.getJSON(url, data, function(result) { return resul ...
- C#调用存储过程带输出参数或返回值
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...
随机推荐
- EMQ集群搭建实现高可用和负载均衡(百万级设备连接)
一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...
- Linux下 ls 命令的高级用法8例
Linux下 ls 命令的高级用法8例 在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次.但是,除了 ls -l 以外,你还 ...
- 论文阅读:Multi-task Learning for Multi-modal Emotion Recognition and Sentiment Analysis
论文标题:Multi-task Learning for Multi-modal Emotion Recognition and Sentiment Analysis 论文链接:http://arxi ...
- Win10 在VM里面装Centos7.4后使用桥接模式连接外网,并用MobaXterm远程虚拟机详细教程
1.首先登陆虚拟机如图 2.执行ping命令看虚拟机里面的centos7是否可以连网 ping www.baiducom 此时会报错:name or service not known 3.设置一个文 ...
- python文件的相关操作
python 目录 python 1.python文件的介绍 使用文件的目的 Python文件的类型主要有两种:文本文件和二进制文件. 操作文件的流程主要有三步:打开-操作-关闭操作. 2.文件的打开 ...
- day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...
- 使用binlog2sql恢复数据
binlog2sql 是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等.主要用途如 ...
- 【Unity 插件】Lean Pool 使用
2020-09-11 Lean Pool 是一个轻量级的游戏对象池库,它可以轻松的帮助你的游戏提高性能.当然,Lean Pool也可以工作于普通的C#类. 目录: 1.Lean Pool使用 2.Le ...
- Java基础一篇过(三)I/O流总结
一.啥是I/O 概念:I/O为输入,输出流的统称,流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象. 本质:本质是数据传输,即数据在两设备间的传输称为流,根据数据传输特性将流抽象为各 ...
- Maven依赖管理之BOM
目录 什么是BOM 一个BOM的格式 怎么使用BOM 通过parent引用 通过dependencyManagement引用 怎么查看依赖的某个BOM的具体清单 版本冲突时的一些规则 何为依赖调节 参 ...