Bash Shell PS1:10 个让 Linux 提示符变得非常实用和时尚的例子
在之前文章中,我们讨论了 Linux 环境变量PS[1-4] 和 PROMPT_COMMAND。如果使用得当,PS1 可以直接在命令提示符下提供有价值的信息。
让我们尝试使用本文提供的 10 个示例,让优秀的旧 Linux 提示符变得非常实用和时尚。
1.在提示中显示用户名、主机名和当前工作目录
本例中的PS1在提示中显示如下三个信息:
- \u - 用户名
- \h – 主机名
- \w - 当前工作目录的完整路径
-bash-3.2$ export PS1="\u@\h \w> "
ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
2.在提示中显示当前时间
在 PS1 环境变量中,你可以直接执行任何 Linux 命令,通过格式 $(linux_command) 指定。在以下示例中,执行 $(date) 命令以在提示中显示当前时间。
ramesh@dev-db ~> export PS1="\u@\h [\$(date +%k:%M:%S)]> "
ramesh@dev-db [11:09:56]>
您还可以使用 \t 以 hh:mm:ss 格式显示当前时间,如下所示:
ramesh@dev-db ~> export PS1="\u@\h [\t]> "
ramesh@dev-db [12:42:55]>
您还可以使用 \@ 以 12 小时 am/pm 格式显示当前时间,如下所示:
ramesh@dev-db ~> export PS1="[\@] \u@\h> "
[04:12 PM] ramesh@dev-db>
3. 在提示符中显示任何 Linux 命令的输出
您可以在提示符中显示任何 Linux 命令的输出。下面的示例显示三个以 | 分隔的项目。(管道)在命令提示符下:
- \!:命令的历史编号
- \h:主机名
- $kernel_version:来自 $kernel_version 变量的 uname -r 命令的输出
- \$?:上一条命令的状态
ramesh@dev-db ~> kernel_version=$(uname -r)
ramesh@dev-db ~> export PS1="\!|\h|$kernel_version|\$?> "
473|dev-db|2.6.25-14.fc9.i686|0>
4.更改提示的前景色
以蓝色显示提示,以及用户名、主机和当前目录信息
$ export PS1="\e[0;34m\u@\h \w> \e[m"
[注意:这是浅蓝色提示]
$ export PS1="\e[1;34m\u@\h \w> \e[m" [注:这是深蓝色提示]
- \e[ - 表示颜色提示的开始
- x;ym – 表示颜色代码。使用下面提到的颜色代码值。
- \e[m – 表示颜色提示结束
颜色代码表:
黑色 0;30
蓝色 0;34
绿色 0;32
青色 0;36
红色 0;31
紫色 0;35
棕色 0;33 [注:深色用 1 代替 0]
通过将以下几行添加到 .bash_profile 或 .bashrc 使颜色更改永久化
STARTCOLOR='\e[0;34m';
ENDCOLOR="\e[0m"
export PS1="$STARTCOLOR\u@\h \w> $ENDCOLOR"
5.更改提示的背景颜色
通过在 PS1 提示中指定 \e[{code}m 来更改背景颜色,如下所示。
$ export PS1="\e[47m\u@\h \w> \e[m"
[注:这是浅灰色背景]
背景与前景的结合
export PS1="\e[0;34m\e[47m\u@\h \w> \e[m"
[注:这是浅蓝色前景和浅灰色背景]
将以下内容添加到 .bash_profile 或 .bashrc 以使上述背景和前景色永久化。
STARTFGCOLOR='\e[0;34m';
STARTBGCOLOR="\e[47m"
ENDCOLOR="\e[0m"
导出 PS1="$STARTFGCOLOR$STARTBGCOLOR\u@\h \w> $ENDCOLOR"
使用以下背景颜色进行操作并选择适合您口味的颜色:
- \e[40m
- \e[41m
- \e[42m
- \e[43m
- \e[44m
- \e[45m
- \e[46m
- \e[47m
6.在提示中显示多种颜色
您还可以在同一个提示中显示多种颜色。将以下函数添加到 .bash_profile
function prompt {
local BLUE="\[\033[0;34m\]"
local DARK_BLUE="\[\033[1;34m\]"
local RED="\[\033[0;31m\]"
local DARK_RED="\[\033[1;31m\]"
local NO_COLOR="\[\033[0m\]"
case $TERM in
xterm*|rxvt*)
TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
TITLEBAR=""
;;
esac
PS1="\u@\h [\t]> "
PS1="${TITLEBAR}\
$BLUE\u@\h $RED[\t]>$NO_COLOR "
PS2='continue-> '
PS4='$0.$LINENO+ '
}
您可以重新登录以使更改生效或获取 .bash_profile,如下所示。
$. ./.bash_profile
$ prompt
ramesh@dev-db [13:02:13]>
7.使用tput更改提示颜色
您还可以使用 tput 更改 PS1 提示的颜色,如下所示:
$ export PS1="\[$(tput bold)$(tput setb 4)$(tput setaf 7)\]\u@\h:\w $ \[$(tput sgr0)\]"
tput 颜色功能:
- tput setab [1-7] – 使用 ANSI 转义设置背景颜色
- tput setb [1-7] – 设置背景颜色
- tput setaf [1-7] – 使用 ANSI 转义设置前景色
- tput setf [1-7] – 设置前景色
tput 文本模式功能:
- tput bold – 设置粗体模式
- tput dim – 打开半亮模式
- tput smul – 开始下划线模式
- tput rmul – 退出下划线模式
- tput rev – 打开反向模式
- tput smso – 进入突出模式(rxvt 上的粗体)
- tput rmso – 退出突出模式
- tput sgr0 – 关闭所有属性
tput 的颜色代码:
- 0 – 黑色
- 1 – 红色
- 2 – 绿色
- 3 – 黄色
- 4 – 蓝色
- 5 – 洋红色
- 6 – 青色
- 7 – 白色
8. 使用 PS1 变量的可用代码创建您自己的提示
使用以下代码并创建您自己的个人 PS1 Linux 提示,该提示功能实用且适合您的口味。此列表中的哪些代码对日常使用非常有帮助?留下您的评论,让我知道您在 Linux 提示符下使用的 PS1 代码。
- \a ASCII 钟形字符 (07)
- \d “Weekday Month Date”格式的日期(例如,“Tue May 26”)
- \D{format} – 将格式传递给 strftime(3) 并将结果插入到提示字符串中;空格式会导致特定于语言环境的时间表示。大括号是必需的
- \e ASCII 转义字符 (033)
- \h主机名直到第一部分
- \H主机名
- \j当前由 shell 管理的作业数
- \l shell 终端设备名称的基本名称
- \n换行
- \r回车
- \s shell 的名称,$0 的基本名称(最后一个斜杠后面的部分)
- \t 24 小时 HH:MM:SS 格式的当前时间
- \T 12 小时 HH:MM:SS 格式的当前时间
- \@ 12 小时制上午/下午格式的当前时间
- \A 24 小时 HH:MM 格式的当前时间
- \u当前用户的用户名
- \v bash 的版本(例如 2.00)
- \V bash 的发布版本,版本 + 补丁级别(例如 2.00.0)
- \w当前工作目录,$HOME 缩写为波浪号
- \W当前工作目录的基本名称,$HOME 缩写为波浪号
- \! 此命令的历史编号
- \#该命令的命令号
- \$如果有效 UID 为 0,则为 #,否则为 $
- \nnn八进制数对应的字符nnn
- \\一个反斜杠
- \[开始一个非打印字符序列,可用于将终端控制序列嵌入到提示中
- \]结束一个非打印字符序列
9. 在 PS1 变量中使用 bash shell 函数
您还可以调用 PS1 中的 bash shell 函数,如下所示。
ramesh@dev-db ~> function httpdcount {
> ps aux | grep httpd | grep -v grep | wc -l
> }
ramesh@dev-db ~> export PS1="\u@\h [`httpdcount`]> "
ramesh@dev-db [12]>
[注意:这里显示运行的httpd进程总数]
您可以将以下行添加到 .bash_profile 或 .bashrc 以使此更改永久化:
function httpdcount {
ps aux | grep httpd | grep -v grep | wc -l
}
export PS1='\u@\h [`httpdcount`]> '
10. 在 PS1 变量中使用 shell 脚本
您还可以调用 PS1 变量内的 shell 脚本。在下面的示例中,计算当前目录的总文件大小的 ~/bin/totalfilesize.sh 在 PS1 变量中被调用。
ramesh@dev-db ~> cat ~/bin/totalfilesize.sh
for filesize in $(ls -l . | grep "^-" | awk '{print $5}')
do
let totalsize=$totalsize+$filesize
done
echo -n "$totalsize"
ramesh@dev-db ~> export PATH=$PATH:~/bin
ramesh@dev-db ~> export PS1="\u@\h [\$(totalfilesize.sh) bytes]> "
ramesh@dev-db [534 bytes]> cd /etc/mail
ramesh@dev-db [167997 bytes]>
【注意:这里执行totalfilesize.sh, 在PS1提示中显示当前目录的总文件大小】
- 点赞
- 收藏
- 关注作者
评论(0)