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

ddz*_*wmm 15 bash prompt escape-characters

.bashrc

case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

我明白${debian_chroot:+($debian_chroot)}\u@\h: \w,但不是\[\e]0;。它有什么作用?

Ste*_*ris 16

\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


Tho*_*key 7

字符\e]0;的行

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Run Code Online (Sandbox Code Playgroud)

由外壳(等同被解释\e,以\033ASCII码ESC转义字符),开始一个转义序列。序列结束\a(同样由 shell \007` ASCII BEL bell 解释)。

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

从技术上讲它应该是\e\\(ECMA-48),但它不是这样开始的。当该功能于 1986 年首次推出时,xterm在第一个非印刷字符上终止了标题。在\a1989年以来一直X11R4识别为一个字符串结束由xterm的(当单独的参数12加入到区分图标和窗口标题)。

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

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

进一步阅读:

编辑:修正错别字