ArchWiki 中关于 Bash 的美化
Bash/Prompt customization
Prompts
Bash 有 4 个 prompt strings 可以自定义.
这里的 PS
是 Prompt Stringl
的含义:
PS0
, 在每次命令输出后显示在 output 之前, 几乎每个命令都会有输出,它就位于输出之前, 默认是没有的PS1
, 其为基础的 prompt, 会显示在命令之前, 就比如现在的[jie@EVA ~]$
, 全部PS2
, 当 command 需要更多 input 时显示, 如echo << EOF
后出现的>
PS3
PS4
所有的这些 prompt 都可以在 ~/.bashrc
中设置, 如:
1 |
|
Techniques
Bash escape sequeces
当打印 prompt string 时,Bash 会寻找某些反斜线转义的字符 (backslash-escaped characters), 然后把它们扩展成 special strings, 如:
\u
, 会被扩展成当前用户的名称\A
, 会被扩展成当前的时间
因此,如果:就会被扩展成1
PS1=`\A \u $`
17:35 username $
.
在 man bash
中查找 PROMTING
可以看到全部列表.
以下为我自己可能会用到的:
\d
, 以 “Weekday Month Date” 的形式显示时间\h
, 第一个.
之前的 hostname, 一般的 hostname 不一定是一个单词\H
, the hostname\j
, the number of jobs currently managed by shell\i
, the basename of the shell’s terminal device name\s
, shell 的名字\t
, 用 24 小时制 “HH:MM:SS” 显示当前时间\u
, 当前用户的名称\w
, 当前目录,$HOME
被简化为~
波浪线 (tilde)\[
, 开始 a sequence of non-printing character, 即不会显示出非打印字符\]
, 结束 a sequence of non-printing character\a
蜂鸣,\n
换行等都是 non-printing character.
Terminfo escape sequences
查看当前 terminal 提供的 capabilities:
1 |
|
出现在 =
之前的是 capability
的名字. 可在 /usr/share/terminfo
里面查看具体内容.
比如 setaf
用来设置 foreground color of whatever text is printed after it
1 |
|
设置例子:
1 |
|
Bash man page 建议把 tput
的输出用 \[ \]
包裹。这会帮助 bash 忽略非打印字符 (non-printable characters).
PROMPT_COMMAND
这是一个变量,它的值会在 PS1
显示之前被 evaluated. 可用于 resign PS1
.
Escapes between command input and output
很多属性在改变后记得 reset.
Customizing root prompts
在 /root
中修改。
Example
infocmp 命令
会显示 the number of colors tput
works with.
参考另一篇文章
bash 手册
bash 1 printf
是查看 bash shell 中 printf
的使用.
bash 3 printf
可以查看 C 语言中 printf
的使用.
一个例子:
1 |
|
\033[
表示开始的色彩控制.1
表示加粗;
表示分隔32m
表示绿色\033[0m
两个\033[
之间的内容是范围,0m
是结束
具体的颜色可参见https://misc.flogisoft.com/bash/tip_colors_and_formatting
.
ArchWiki 中关于 Bash 的美化
http://example.com/2022/09/05/ArchWiki-中关于-Bash-的美化/