11. 使用 PS1 自定义 bash 提示符


本例中的PS1在提示符中显示以下信息:

  • \u – 用户名
  • \h – 主机名
  • \w – 当前工作目录的完整路径
$ export PS1="\u@\h \w$ "
ramesh@dev-db /etc/mail$ 

使用以下代码并创建您自己的个人 PS1 Linux 提示符,该提示符功能齐全且适合您的口味。

Code 描述
\a ASCII 响铃字符 (07)
\d “周 月 日” 格式的日期(例如 "Tue May 26"
\D{format} 格式被传递给 strftime(3),结果被插入到提示字符串中; 空格式会导致区域特定的时间表示。 大括号是必需的
\e ASCII 转义字符 (033)
\h 主机名的第一部分
\H 完整的主机名
\j 当前由 shell 管理的作业总数
\l shell 终端设备名称的基本名称
\n 新行
\r 回车符
\s shell 的名称,$0 的 basename(最后一个斜杠后面的部分)
\t 24 小时制 HH:MM:SS 格式的当前时间
\T 12 小时制 HH:MM:SS 格式的当前时间
\@ 12 小时制 am/pm 格式的当前时间
\A 24 小时制 HH:MM 格式的当前时间
\u 当前用户的用户名
\v Bash 版本 (例如 4.1)
\V 完整的 bash 版本。 即版本 + 补丁级别(例如 4.1.2)
\w 当前工作目录, $HOME 缩写为~
\W 当前工作目录的basename $HOME 缩写为~
\! 该命令的历史编号
\# 该命令的命令编号
\$ 如果有效 UID 为 0,则为 #,否则为 $
\nnnn 八进制数 nnn 对应的字符
\\ 反斜杠\
\[ 开始一系列非打印字符,可用于将终端控制序列嵌入到提示中
\] 结束非打印字符序列

PS1 环境变量中,您可以通过以$(linux_command)格式指定来直接执行任何 Linux 命令。

在以下示例中,执行命令$(date)以在提示符中显示当前时间。

$ export PS1="\u@\h [\$(date +%k:%M:%S)]$ "

ramesh@dev-db [11:09:56]$

您还可以使用\t"hh:mm:ss" 格式显示当前时间:

$ export PS1="[\@] \u@\h$ "

[04:12 PM] ramesh@dev-db$

下面的示例在命令提示符中显示由|(管道)分隔的三个项

  • \!:命令的历史编号
  • \h:主机名
  • $kernel_version$kernel_version变量中的uname -r命令的输出
  • \$?:最后一个命令的状态
$ kernel_version=$(uname -r)
$ export PS1="\!|\h|$kernel_version|\$?$ "

473|dev-db|2.6.25-14.fc9.i686|0$

您还可以在 PS1 中调用 bash shell 函数,如下所示。这显示正在运行的httpd进程的总数。

$ function httpdcount {
> ps aux | grep httpd | grep -v grep | wc -l
> }

$ export PS1="\u@\h [`httpdcount`]$ "

ramesh@dev-db [12]$

您可以将以下行添加到.bash_profile.bashrc以使此更改永久生效:

function httpdcount {
 ps aux | grep httpd | grep -v grep | wc -l
}

export PS1='\u@\h [`httpdcount`]$ '

您还可以在 PS1 变量内调用 shell 脚本。 在下面的示例中,在 PS1 变量内调用~/bin/totalfilesize.sh,用于计算当前目录的总文件大小。

$ cat ~/bin/totalfilesize.sh
for filesize in $(ls -l . | grep "^-" | awk '{print $5}')
do
 let totalsize=$totalsize+$filesize
done

echo -n "$totalsize"

设置 PS1 变量来调用上面的totalfilesize.sh文件。

$ export PATH=$PATH:~/bin
$ export PS1="\u@\h [\$(totalfilesize.sh) bytes]$ "

ramesh@dev-db [167997 bytes]$

注意:这会执行totalfilesize.sh以在 PS1 提示符中显示当前目录的总文件大小。