No Bash, por que o PROMPT_COMMAND está configurado para algo invisível?

6

No RHEL6 e no CentOS 6, /etc/bashrc define PROMPT_COMMAND aqui:

case $TERM in
xterm*)
    if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
    else
        PROMPT_COMMAND='echo -ne "3]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "
case $TERM in
xterm*)
    if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
    else
        PROMPT_COMMAND='echo -ne "3]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "%pre%7"'
    fi
    ;;
screen)
    if [ -e /etc/sysconfig/bash-prompt-screen ]; then
        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
    else
        PROMPT_COMMAND='echo -ne "3_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "3\"'
    fi
7"' fi ;; screen) if [ -e /etc/sysconfig/bash-prompt-screen ]; then PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen else PROMPT_COMMAND='echo -ne "3_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "3\"' fi

Todas essas opções, até onde eu sei, são impressas de forma invisível. Qual é o uso disso?

Eu sei que PROMPT_COMMAND deve ser executado antes de exibir o prompt ( PS1 normalmente). Eu não entendo porque fazer eco em algo que não é visível é de alguma utilidade.

    
por Belmin Fernandez 26.12.2011 / 18:11

1 resposta

9

3 é o código octal para o caractere Esc (Escape), que é uma boa dica de que as sequências de eco em seu PROMPT_COMMAND são sequências de controle de terminal. Ambas as sequências nos seus exemplos parecem ter definido o título do terminal para user@host:pwd .

O primeiro caso, xterm* , define o nome da janela e o título do ícone. Para uma explicação detalhada, veja a lista de seqüências de controle xterm e desça até encontrar OSC P s; Pt; ST sob Controles do sistema operacional (OSC é ESC ] e ST é ESC \ ).

O segundo caso é para o emulador de terminal screen e na lista de sequências de controlo de ecrã , explica que ESC _ define o estado de hardware da tela ( basta colocar, esse é o título da janela da tela).

    
por 26.12.2011 / 18:33