\[\e]0 的含义;在 PS1 中的 .bashrc 中

\[\e]0 的含义;在 PS1 中的 .bashrc 中

.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 解释(相当于\eASCII \033ESC逃脱特点),开始转义序列。序列结束on \a(同样由 shell \007` ASCII BEL 解释)。

0是一个参数(所谓的操作系统命令),它告诉终端更改图标和窗口标题。

从技术上讲它应该是\e\\(ECMA-48),但它并不是这样开始的。当该功能于 1986 年首次推出时,xterm标题在第一个非打印字符处终止。自 1989 年的 X11R4 起,就\a被 xterm 识别为字符串终止符(当时添加了单独的参数12来区分图标和窗口标题)。

rxvt几年后发现了这个,几年后 xterm 被修改为接受标准字符串终止符。变更日志中没有特别指出,但它ctlseqs.ms首次出现于 1996 年 8 月。通常,当其他终端实现了它们才接受的功能时\a

如果没有结尾,孤立的转义字符可能会被视为终端特定方式的错误(包括完全忽略文本)。

进一步阅读:

编辑:修正错别字

相关内容