Bash Shell PS1:10 个让 Linux 提示符变得非常实用和时尚的例子

举报
Tiamo_T 发表于 2021/11/24 22:16:24 2021/11/24
【摘要】 在之前文章中,我们讨论了 Linux 环境变量PS[1-4] 和 PROMPT_COMMAND。如果使用得当,PS1 可以直接在命令提示符下提供有价值的信息。让我们尝试使用本文提供的 10 个示例,让优秀的旧 Linux 提示符变得非常实用和时尚。1.在提示中显示用户名、主机名和当前工作目录本例中的PS1在提示中显示如下三个信息:\u - 用户名\h – 主机名\w - 当前工作目录的完整路...

在之前文章中,我们讨论了 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提示中显示当前目录的总文件大小】
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。