11. 使用 PS1 自定义 bash 提示符
在提示中显示用户名、主机名和当前目录
本例中的PS1在提示符中显示以下信息:
\u
– 用户名\h
– 主机名\w
– 当前工作目录的完整路径
$ export PS1="\u@\h \w$ " ramesh@dev-db /etc/mail$
用于定义自定义提示的 PS1
变量的不同代码
使用以下代码并创建您自己的个人
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 函数
您还可以在
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
变量内调用 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
提示符中显示当前目录的总文件大小。