ArchWiki 中关于 Bash 的美化

ArchWiki Bash/Prompt

Bash/Prompt customization

Prompts

Bash 有 4 个 prompt strings 可以自定义.

这里的 PSPrompt Stringl 的含义:

  • PS0, 在每次命令输出后显示在 output 之前, 几乎每个命令都会有输出,它就位于输出之前, 默认是没有的
  • PS1, 其为基础的 prompt, 会显示在命令之前, 就比如现在的 [jie@EVA ~]$, 全部
  • PS2, 当 command 需要更多 input 时显示, 如 echo << EOF 后出现的 >
  • PS3
  • PS4

所有的这些 prompt 都可以在 ~/.bashrc 中设置, 如:

1
PS2='>'

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
$ infocmp

出现在 = 之前的是 capability 的名字. 可在 /usr/share/terminfo 里面查看具体内容.

比如 setaf 用来设置 foreground color of whatever text is printed after it

1
$ tput setaf 2

设置例子:

1
2
3
4
GREEN="\[$(tput setaf 2)\]"
RESET="\[$(tput sgr0)\]"

PS1="${GREEN}my prompt${RESET}>"

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
printf '\033[1;32m yes \033[0m'
  • \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-的美化/
作者
Jie
发布于
2022年9月5日
许可协议