在 Bash 中,为什么 PROMPT_COMMAND 设置为不可见的东西?

Bel*_*dez 6 bash prompt terminal-emulator escape-characters

在 RHEL6 和 CentOS 6 上,在此处/etc/bashrc设置PROMPT_COMMAND

case $TERM in
xterm*)
    if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
    else
        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
    fi
    ;;
screen)
    if [ -e /etc/sysconfig/bash-prompt-screen ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
    else
        PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
    fi
Run Code Online (Sandbox Code Playgroud)

据我所知,所有这些选项都是隐形打印的。这有什么用?

我知道这PROMPT_COMMAND是在显示提示之前执行的(PS1通常)。我不明白为什么回声不可见的东西有任何用处。

jw0*_*013 9

\033Esc(Escape) 字符的八进制代码,这是一个很好的提示,表明您的回显字符串PROMPT_COMMAND是终端控制序列。您示例中的两个序列看起来都将终端标题设置为user@host:pwd.

第一种情况,xterm*设置窗口名称和图标标题。详细解释请查看xterm 控制序列列表,向下滚动直到找到OSC P s;点; ST操作系统控制下(OSC 是ESC ],ST 是ESC \)。

第二种情况是针对screen终端模拟器,在屏幕控制序列列表中,它解释了ESC _ 设置屏幕的hardstatus(简单地说,就是屏幕窗口的标题)。