在.bashrc
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
我明白${debian_chroot:+($debian_chroot)}\u@\h: \w
,但又不明白\[\e]0;
。它有什么作用?
答案1
这\e]0;
是一个转义序列;\e
被替换为 ASCII 27 (ESC),因此终端接收到 4 个字符, ESC ] 0 ;
告诉 xterm 设置图标和标题栏,以 BEL ( \a
) 结尾。
因此该序列\e]0;STUFFGOESHERE\a
会将终端的标题设置为 STUFFGOESHERE。在您的示例中,它将标题设置为用户/主机/路径。
FWIW,xterm 转义序列记录在:https://www.x.org/docs/xterm/ctlseqs.pdf
答案2
\e]0;
行中的字符
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
由 shell 解释(相当于\e
ASCII \033
ESC逃脱特点),开始转义序列。序列结束on \a
(同样由 shell \007` ASCII BEL 解释钟)。
这0
是一个参数(所谓的操作系统命令),它告诉终端更改图标和窗口标题。
从技术上讲它应该是\e\\
(ECMA-48),但它并不是这样开始的。当该功能于 1986 年首次推出时,xterm
标题在第一个非打印字符处终止。自 1989 年的 X11R4 起,就\a
被 xterm 识别为字符串终止符(当时添加了单独的参数1
和2
来区分图标和窗口标题)。
rxvt
几年后发现了这个,几年后 xterm 被修改为还接受标准字符串终止符。变更日志中没有特别指出,但它ctlseqs.ms
首次出现于 1996 年 8 月。通常,当其他终端实现了它们才接受的功能时\a
。
如果没有结尾,孤立的转义字符可能会被视为终端特定方式的错误(包括完全忽略文本)。
进一步阅读:
编辑:修正错别字