返回介绍

Hack-43 自定义 PS1

发布于 2025-03-08 17:38:37 字数 3261 浏览 0 评论 0 收藏 0

自定义 PS1

1.在提示符里输出用户名,主机名,当前目录:

export PS1="\u@\h \W> "

其中:

  • \W 是当前目录的 basename, 也就是目录名,不带绝对路径的。

其他的在之前已经说过,不再重复。

2.在提示符里输出当前时间:

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

PS1 中可以带命令,正如上面的例子,输出时便会附带当前时间。

上面的 $(date +%H:%M:%S) 可以替换为: \t

或者用 \@ 输出当前的小时和分钟。

3.显示任何命令:

其实,这个说法并不是很准确,因为自定义的命令不会运行,除非像上一篇那样,在外部定义了一个自己的命令,否则,只会输出第一次命令运行得到的结果,听起来可能有点啰嗦,你自己动手试一下就好了。

这里再多说几个:

......

妈蛋,原作者说的都是些啥啊,越来越水了... 没用的就不翻译了。

说点自己的经验:

  1. 这些变量是类似于一个子 shell 运行的,外部命令不会对内部产生影响
  2. 变量可以是一条命令,但是这条命令必须是系统自带的,自己写的函数不会起作用。
  3. 自己在外部写的函数会在里面被引用,不知道是替换还是什么,总之能够运行。
  4. 不动手试一下你就不知道我说的是什么...

4.用内部已有的代码自定义 PS1

如果你看过之前的那篇文章(Hack-38 的扩展阅读部分), 这里的东西就当是复习了。

先列举一下那些内部代码,类似于 \n 代表换行符一样:

  • \a 响铃
  • \d 日期
  • \D{format} 自定义的日期
  • \e 逃逸字符
  • \h 主机名(前半部分)
  • \H 主机名(完整的)
  • \j 当前 shell 下的后台 job 数量,相当于 jobs
  • \l shell 终端的 basename... (这个都给定义了...
  • |n 换行
  • \r 你知道 \r\n 的区别嘛 (这个是回车,上面的是换行哦~)
  • \s shell 的名字
  • \t 24 小时制的时间 - HH:MM:SS
  • \T 12 小时制的时间 - HH:MM:SS
  • \@ 12 小时制带上下午的时间 - am/pm (真啰嗦啊...
  • \A 24 小时制的时间 - HH:MM
  • \u 当前用户名
  • \v 当前 Bash 的版本号 (我真是醉了...
  • \V Bash 的发布版本号 4.3.42 (可以理解为较长的那个
  • \w 当前目录(绝对路径)
  • \W 当前目录的短名字 (可以理解为目录名
  • \! 这条命令在历史记录中的编号
  • \# 这条命令在当前 shell 中的编号
  • \$ 如果 $UID -eq 0 那么这个就输出 # , 否则输出 $
  • \nnn nnn 表示一个八进制的数字,整体就表示这个八进制的字符
  • \\ 一个反斜杠
  • \[ 转义开中括号
  • \] 转义闭中括号

5.在 PS1 中运行自定义 function

哈哈,我翻译 PROMPT_COMMAND 那一部分的时候还没看到这里呢,所以不算剧透哦,因为我也不知道作者写了这一部分,而且上面的在 PS* 变量中自定义功能可是我举一反三得来的哦~

所以,这里作者说的是定义了一个外部 function , 然后在从 PS1 里面调用。

这样你的选择就多了去了,随你想干什么, bash 都满足你哦~ 哈哈~

6.在 PS1 中运行脚本

PS1 变量中既然可以运行命令,那么同样也可以运行脚本。

假如你在 ~/bin/totalfilesize.sh 中存放着一个内容如下的脚本:

#!/bin/bash
for filesize in $(ls -l . | grep "^-" | awk '{print $5}')
do
let totalsize=$totalsize+$filesize
done
echo -n "$totalsize"

正如你所看到的,这个脚本的作用是计算当前目录下文件的大小。

然后我们将 PS1 的值改掉: export PS1="\u@\h [\$(totalfilesize.sh) bytes]> "

那么每当你敲回车的时候都会看到当前目录下的文件总大小:

ramesh@dev-db [534 bytes]> cd /etc/mail
ramesh@dev-db [167997 bytes]>

PS:可以把脚本内容改成:

ls -l | awk '/^-/ { sum+=$5 } END { printf sum }'

这样会简练一些。

本书简介:

  • Linux 进阶技巧
  • 巧妙的命令组合
  • Bash 某些技巧
  • 一共一百零一个(包括充数的)
  • 最后有个奖励章(额外技巧)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文