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

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

在 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

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

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

答案1

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

第一种情况,xterm*设置窗口名称和图标标题。有关详细说明,请查看列表xterm 控制序列并向下滚动直到找到OSC P s; Pt;英石在下面操作系统控制(OSC 是ESC ],ST 是ESC \)。

第二种情况是针对screen终端仿真器,在屏幕控制序列,它解释了ESC _ 设置屏幕的硬状态(简单地说,这是屏幕窗口的标题)。

相关内容