- 简介
- 第一章 - 关于 CD
- 第二章 - 基本命令
- Hack-7 Grep
- Hack-8 Grep 与正则表达式
- Hack-9 Find 命令
- Hak-10 重定向
- Hack-11 Join 命令
- Hack-12 Tr 命令
- Hack-13 Xargs 命令
- Hack-14 Sort 命令
- Hack-15 Uniq 命令
- Hack-16 Cut 命令
- Hack-17 Stat 命令
- Hack-18 Diff 命令
- Hack-19 Ac 命令
- Hack-20 让命令在后台执行
- Hack-21 Sed 替换基础
- Hack-22 Awk 简介
- Hack-23 VIM 基本入门
- Hack-24 Chmod 命令
- Hack-25 Tail -f -f
- Hack-26 Less 命令
- Hack-27 Wget 下载器
- 第三章 - SSH 技巧
- 第四章 - 日期设置
- 第五章 - PS* 介绍
- 第六章 - 压缩和打包
- 第七章 - 历史命令
- 第八章 - 系统任务管理
- Hack-55 Fdisk 命令
- Hack-56 Mke2fsk 命令
- Hack-57 挂载一个分区
- Hack-58 查看分区信息
- Hack-59 新建一个 swap 分区
- Hack-60 新建用户
- Hack-61 新建用户组
- Hack-62 SSH 密钥登录
- Hack-63 ssh-copy-id 和 ssh- agent
- Hack-64 Crontab 命令
- Hack-65 用 SysRq key 安全的重启
- Hack-66 Parted 命令
- Hack-67 Rsync 命令
- Hack-68 Chkconfig/Service 命令
- Hack-69 Anacron 配置
- Hack-70 IPTables 规则举例
- 第九章 - 安装软件
- 第十章 - LAMP 套装
- 第十一章 - Bash 脚本
- 第十二章 - 系统性能监控
- 第十三章 - 额外的技巧
Hack-43 自定义 PS1
自定义 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.显示任何命令:
其实,这个说法并不是很准确,因为自定义的命令不会运行,除非像上一篇那样,在外部定义了一个自己的命令,否则,只会输出第一次命令运行得到的结果,听起来可能有点啰嗦,你自己动手试一下就好了。
这里再多说几个:
......
妈蛋,原作者说的都是些啥啊,越来越水了... 没用的就不翻译了。
说点自己的经验:
- 这些变量是类似于一个子 shell 运行的,外部命令不会对内部产生影响
- 变量可以是一条命令,但是这条命令必须是系统自带的,自己写的函数不会起作用。
- 自己在外部写的函数会在里面被引用,不知道是替换还是什么,总之能够运行。
- 不动手试一下你就不知道我说的是什么...
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论