【Linux工具|bash美化】bash终端提示符PS1美化

2023-05-16

文章目录

  • 1. PS1示例
  • 2. 颜色设置
    • 2.1. 颜色设置格式
    • 2.2. 颜色格式说明
    • 2.3. 格式组合
  • 3. bash提示符中的变量
    • 3.1. 其他扩展
  • 4. 参考

1. PS1示例

先说一下bash版本

$ bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

bash中的PS1是主提示符变量,也是默认提示符变量。另外需要注意,PS1对bash起作用,对sh是无效的。可以通过echo $SHELL确认当前用户使用的shell是否为bash。除了PS1外,还有PS2、PS3、PS4几个环境变量用来提示一些其他信息。

临时使用可以直接在bash命令行通过export PS='xxxx'来指定,如果要永久生效,可以把在bash输入的内容保存到~/.bashrc.bash_aliases中,使用source ~/.bashrc可以立即生效,重新登陆或重启也会自动执行source ~/.bashrc

下面看几个示例

export PS1='\e[1;32m\][\e[1m\]\e[3;35m\]\u\e[0;34m\]@\e[1;33m\]\H\e[1;32m\]][\e[1;34m\]\t\e[1;32m\]] \e[1m\]\e[3;30m\]\w\e[0m\]\n\$ '

在这里插入图片描述

上边示例的闪烁版本,用户名和主机会闪烁显示

export PS1='\e[1;32m\][\e[1m\]\e[5m\]\e[3;35m\]\u\e[0m\]\e[5;34m\]@\e[1;33m\]\H\e[0m\]\e[1;32m\]][\e[1;34m\]\t\e[1;32m\]] \e[1;30m\]\e[3;30m\]\w\e[0m\]\n\$ '

在这里插入图片描述

参考最好看的Bash美化——打造ParrotOS风格的Bash改的版本

export PS1='\e[0;31m\]\342\224\214\342\224\200\e[1;32m\][\e[1m\]\e[3;35m\]\u\e[0m\]@\e[1;33m\]\H\e[1;32m\]][\e[1;34m\]\t\e[1;32m\]] \e[1;30m\]\e[3;30m\]$PWD\e[0m\]\n\e[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \e[0m\]\$ '

在这里插入图片描述

2. 颜色设置

2.1. 颜色设置格式

\e[A;F;Bm文本
\e[A;F;Bm\]文本
\[\e[A;F;Bm\]文本

\e[A;F;Bm控制文本格式,\[\]分别表示不可见字符的起始和结束,所以三种格式效果是一样的。个人比较喜欢用\e[A;F;Bm\]

需要注意的是,格式设置后,会对后边所有文本起作用,包括我们在终端输入的命令。而且A/F/B是分别起作用的,只要不被重置,效果会一直延续,后边会详细解释。

如果想取消文本效果,可以在文本前添加如下格式。当然下边格式之后也可以加文本,只是文本显示为默认样式。

\e[0m
\e[0m\]
\[\e[0m\]

2.2. 颜色格式说明

这里说一下,格式中A/F/B的位置是任意的,bash是依靠值来对格式进行解析。也就是说\e[A;F;Bm\]\e[F;B;Am\]\e[F;B;Am\]等效果都是一样的。而且因为A/F/B的位置是任意的,为了书写简便,就可以省略A/F/B中的1个或2个参数。

下面对格式进行详细说明
\e表示Esc,也可以替换为\033

A表示字体样式,其中数字可以使用多位数,如033效果相同

0   OFF,默认样式
1   高亮加粗显示
2   变暗
3   斜体
4   显示下划线
5   闪烁显示
7   反色显示
8   颜色不可见
9   删除线

F表示字体颜色,B表示背景颜色

F   B   颜色
30  40  黑色
31  41  红色
32  42  绿色
33  43  黄色
34  44  蓝色
35  45  紫红色
36  46  青蓝色
37  47  白色

2.3. 格式组合

字体样式A只能控制一种格式,如果想要加粗斜体、红字黄底该怎么办呢?

\e[1;31;43m\]\e[3m\]文本
\e[3;31;43m\]\e[1m\]文本
\e[1;31m\]\e[3;43m\]文本

下面来详细分解下,关于\u\H等变量的说明见后边bash提示符中的变量

export PS1='\e[1;32m\][\e[1m\]\e[3;35m\]\u\e[0;34m\]@\e[1;33m\]\H\e[1;32m\]][\e[1;34m\]\t\e[1;32m\]] \e[1m\]\e[3;30m\]\w\e[0m\]\n\$ '
\e[1;32m\][             加粗绿色显示[
\e[1m\]\e[3;35m\]\u     加粗斜体紫红色显示用户名
\e[0;34m\]@             默认样式蓝色显示@
\e[1;33m\]\H            加粗黄色显示主机名
\e[1;32m\]][            加粗绿色显示][
\e[1;34m\]\t            加粗蓝色显示时间
\e[1;32m\]]             加粗绿色显示]和空格
\e[1m\]\e[3;30m\]\w     加粗斜体黑色显示工作路径
\e[0m\]\n\$             清除所有格式,换行显示提示符,注意提示符后有空格

前边提到A/F/B起作用,以上边用户名显示举例来说
如果把\e[3;35m\]\u中的紫色显示去掉,用户名会继续显示绿色。

\e[1;32m\][\e[1;32m\][\e[1m\]\e[3;35m\]\u
# 去掉紫色部分
\e[1;32m\][\e[1;32m\][\e[1m\]\e[3m\]\u

在这里插入图片描述

3. bash提示符中的变量

官方链接:Controlling the Prompt (Bash Reference Manual)

\a      ASCII响铃字符(07)
\d      日期,格式为"周 月 日"
\D{format}  参数format被传递给strftime(3)来构造自定格式的时间并入提示符中;
            该参数为空时根据本地化设置自动生成格式。
\e      ASCII转义字符(ESC)同\033
\h      简略主机名,在第一个点号前的内容
\H      完整主机名
\j      shell当前管理的任务数
\l      shell终端设备的基本名称
\n      换行
\r      回车,到当前行的起始位置
\s      shell的名称,$0的基本名称(最后一个斜杠后面的部分)
\t      当前时间(24小时) HH:MM:SS
\T      当前时间(12小时) HH:MM:SS
\@      当前时间(12小时) am/pm
\A      当前时间(24小时) HH:MM
\u      当前用户名称
\v      bash版本(如"2.00")
\V      bash版本+补丁号(如"2.00.0")
\w      当前工作目录,主目录会显示为~
\W      当前工作目录的基本名称,只会列出最后一个目录,主目录会显示为~
\!      该命令在历史文件中的位置
\#      该命令在当前shell中执行的序列位置
\$      提示符,root用户为#,普通用户为$
\nnn    八进制数ASCII,用于显示一些特殊字符
\\      反斜杠
\[      非打印字符起始,可以用来将终端控制序列嵌入到提示符中
\]      非打印字符起始结束

3.1. 其他扩展

除了bash提供的变量之外,还可以使用其他的环境变量,如PWD等,也可以使用一些命令表达式。

比如可以把\w换乘${PWD}$(pwd -P)

再比如添加$([[ $? != 0 ]] && echo -ne "\e[31mFAIL\e[0m" || echo -ne "\e[34mOK\e[0m"),显示上一条命令的执行结果

export PS1='\e[1;32m\][\e[1m\]\e[3;35m\]\u\e[0;34m\]@\e[1;33m\]\H\e[1;32m\]][\e[1;34m\]\t\e[1;32m\]][$([[ $? != 0 ]] && echo -ne "\e[31mFAIL\e[0m" || echo -ne "\e[34mOK\e[0m")\e[1;32m\]] \e[1m\]\e[3;30m\]\w\e[0m\]\n\$ '

在这里插入图片描述

4. 参考

最好看的Bash美化——打造ParrotOS风格的Bash

Controlling the Prompt (Bash Reference Manual)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux工具|bash美化】bash终端提示符PS1美化 的相关文章

  • Dell安装驱动程序出现的错误(DupAPI::Execute): *** Shell Execute Error. System error text

    在官网下的驱动却怎么也安装不上 xff0c 一直提示 The update installer operation is unsuccessful 然后打开日志文件查看 xfeff 04 10 19 10 12 11 Update Pack
  • 浮点数大小比较

    引言 在一次某公司的笔试题中出现了一题在一个无序的浮点数数组中找出相同的数 xff0c 那么在计算机中一般的整型的十进制数一般都是直接通过 61 61 来判断两个数是否相等的 xff0c 但是如果是浮点数还可以用这样的方式进行判断吗 xff
  • int的取值范围

    引言 在学C 43 43 或者Java的时候应该都会先了解各种基本数据类型的初值和它们的取值范围 xff0c 有些人可能会不太重视这块内容 xff0c 其实很重要 xff0c 很多大公司面试的过程中都会问到int的取值范围 xff0c 溢出
  • Intel汇编语言程序设计学习-第三章 汇编语言基础-上

    汇编语言基础 3 1 汇编语言的基本元素 有人说汇编难 xff0c 有人说汇编简单 xff0c 我个人不做评价 xff0c 下面是一个简单的实例 xff08 部分代码 xff09 xff1a main PROC mov eax 5 5送 E
  • 向量和矩阵范数

    参考 xff1a https en wikipedia org wiki Matrix norm Frobenius norm https blog csdn net Michael Corleone article details 752
  • ubuntu安装后分辨率只有一个选项

    ubuntu 16 04安装后分辨率只有一个选项 1024x768 xff0c 使用xrandr命令出现错误 xff1a xrandr Failed to get size of gamma for output default xff0c
  • android.hardware.Camera入坑之旅

    1 相机预览方向适配 可以参考谷歌官方适配方案 public static void setCameraDisplayOrientation Activity activity int cameraId android hardware C
  • MySQL深入的学习笔记

    MYSQL高级 MySql架构演变 这个很重要 软件的环境是如何从单应用算法极致优化的方向 到分布式的进化 这个时代 就会淘汰好多单体应用的coder 比如我自己 哈哈哈哈 1 0时代 单机单库 单应用 单数据库 快速 方便 好维护 并发量
  • Java变量的声明、初始化和作用域

    一 Java变量的声明 在 Java 程序设计中 xff0c 每个声明的变量都必须分配一个类型 声明一个变量时 xff0c 应该先声明变量的类型 xff0c 随后再声明变量的名字 下面演示了变量的声明方式 double salary int
  • 无线网卡无法启动(代码 10),怎么办?

    前言 无线网卡突然无法启动 xff0c 代码 10 xff0c 怎么办 xff1f 本文记述了作者遇到这个问题的经历和最终解决方法 xff0c 希望我的分享能给大家节约宝贵时间 一 我遇到的问题 先说明一下 xff1a 我用的是华硕的飞行堡
  • systemd内置变量

    替换符含义 b系统的 34 Boot ID 34 字符串 参见 random 4 手册 C缓存根目录 对于系统实例来说是 var cache xff1b 对于用户实例来说是 XDG CACHE HOME E配置根目录 对于系统实例来说是 e
  • IOS轻松实现仿网易新闻顶部滑动指示器(Scrollview实现)

    实现原理很简单 xff0c 就是利用了scrollview进行自定义 xff0c 对外部传入的scrollview滑动事件进行监听 xff0c 源码如下 xff1a xff08 1 xff09 h文件代码 ScrollViewIndicat
  • 【极客日常】Go语言string、int、float、rune、byte等数据类型的转换方法

    golang的数据类型转换是困惑新gopher的一大问题之一 相对于python xff0c golang的数据类型转换可要麻烦的多 xff0c 而且还不走寻常路地诞生了些新的方法跟名词 因此本文讲解golang常见数据类型string i
  • View的mParent变量初始化

    mParent变量实际上是PhoneWindow DecorView类型 xff0c 是所有应用窗口的根视图 xff0c 是FrameLayout的子类 View的requestLayout 函数也是调用了mParent requestLa
  • java:N的N次方

    题目描述 现给你一个正整数N xff0c 请问N N的最左边的数字是什么 xff1f 输入格式 输入包含多组测试数据 每组输入一个正整数N xff08 N lt 61 1000000 xff09 输出 对于每组输入 xff0c 输出N N的
  • CentOS升级curl

    1 安装repo rpm Uvh http www city fan org ftp contrib yum repo rhel6 x86 64 city fan org release 2 1 rhel6 noarch rpm 2 查看该
  • ACM:入口的选择------深度优先搜索

    入口的选择 Time Limit 1000MS Memory Limit 32768K Description Zeism玩的赛车游戏中 xff0c 有一种树形的赛道 树根表示赛道的终点 xff0c 任何一个叶子结点表示一个赛道的入口 xf
  • ACM:n!的位数 :斯特林公式

    n 的位数 Time Limit 2000MS Memory Limit 65536K Description 针对每个非负整数n xff0c 计算其n 的位数 Input 输入数据中含有一些整数n xff08 0 n xff1c 10 7
  • java 自定义封装jdbc dao类

    手动封装jdbc和dao层 xff0c 体会其中的优点与不足 注 xff1a 本次采用的mysql数据库记得添加数据库的驱动包 Dbhelper类 xff1a 对jdbc进行封装 xff0c 采用单例模式 xff0c 不用每次都去连接数据库
  • Mybatis 二级缓存

    mybatis的缓存分为一级缓存和二级缓存 xff0c 缓存是用来缓存部分经常性访问的数据 xff0c 而不必每一次都跑到数据库获取或运算 xff0c 目标是提高系统的性能 一级缓存 对于每一个sqlSession 其中有一个HashMap

随机推荐