通过设置环境变量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