Linux命令行提示符美化(PS1&PS2&PS3&PS4)

通过设置环境变量PS1、PS2、PS3以及PS4来自定义用户命令行的字符显示。如果要长期永久性修改提示符,可以将修改提示符的命令添加到$HOME/.profile或$HOME/.bash_profile文件中

PS1

PS1是主提示符变量,也是默认提示符变量。默认值[\u@\h \W]$,显示用户主机名称和工作目录。

基本上通过设置PS1来定义命令行提示字符即可,最常用的需求就是显示登录的用户名、主目录、主机名等。

默认的是:

[root@centos8 ~]# echo $PS1
[\u@\h \W]\$

PS1变量可以使用的参数值有如下:

参数 描述
/d 代表日期,格式为weekday month date,例如:”Mon Aug 1”
/H 完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
/h 仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
/t 显示时间为24小时格式,如:HH:MM:SS
/T 显示时间为12小时格式
/A 显示时间为24小时格式:HH:MM
/u 当前用户的账号名称
/v BASH的版本信息
/w 完整的工作目录名称。家目录会以 ~代替
/W 利用basename取得工作目录名称,所以只会列出最后一个目录
/# 下达的第几个命令
/$ 提示字符,如果是root时,提示符为:# ,普通用户则为:$
/[ 字符”[“
/] 字符”]”
/! 命令行动态统计历史命令次数

PS2

一个非常长的命令可以通过在末尾加 \ 使其分行显示
PS2多行命令的默认提示符,默认值是 >

PS2一般使用于命令行里较长命令的换行提示信息,比如:

#默认换行是一个>符号
[root@centos8 ~]#echo \           
> 

#修改默认换提示>+组合符号
[root@centos8 ~]# export PS2=">+ "

#修改后的默认换行提示符号
[root@centos8 ~]#echo \            
>+ 

PS3

Shell脚本中使用select时的提示符号
直接上例子:

#未设置PS3的脚本:
#默认提示符是 #?
[root@centos8 ~]#cat ps3.sh
select i in a b c exit
do
    case $i in
        a) echo "A";;
        b) echo "B";;
        c) echo "C";;
        exit) exit;;
    esac
done
[root@centos8 ~]#bash ps3.sh 
1) a
2) b
3) c
4) exit
#? 1      
A
#? 2
B
#? 4

##提示符是 Select a character (1-4):
#修改PS3后效果
[root@centos8 ~]#cat ps3new.sh  
PS3="Select a character (1-4): "
select i in a b c exit
do
    case $i in
        a) echo "A";;
        b) echo "B";;
        c) echo "C";;
        exit) exit;;
    esac
done
[root@centos8 ~]#bash ps3new.sh 
1) a
2) b
3) c
4) exit
Select a character (1-4): 1      
A
Select a character (1-4): 3
C
Select a character (1-4): 4

PS4

PS4-set -x用来修改跟踪输出的前缀

#未设置PS4时的shell脚本:
[root@centos8 ~]# cat ps4.sh 
#! /bin/bash
set -x
echo 'PS4 demo script'
ls -l /etc/|wc -l
du -sh ~

#执行结果:
[root@centos8 ~]# sh ps4.sh
+ echo 'PS4 demo script'
PS4 demo script
+ ls -l /etc/
+ wc -l
250
+ du -sh /root
100K    /root
#[注: 当使用sex -x跟踪输出时的提示符为 +]

#设置PS4后时的shell脚本:
[root@centos8 ~]# cat ps4new.sh
#! /bin/bash
export PS4='$0.$LINENO+'
set -x
echo 'PS4 demo script'
ls -l /etc/|wc -l
du -sh ~

#PS4在ps4.sh中定义了下面两个变量
#$0 显示当前的脚本名
#$LINENO 显示当前命令的行号

#执行结果:
[root@centos8 ~]# bash ps4new.sh 
ps4.sh.4+echo 'PS4 demo script'
PS4 demo script
ps4.sh.5+ls -l /etc/
ps4.sh.5+wc -l
250
ps4.sh.6+du -sh /root
100K    /root

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容