Significado de \ [\ e] 0; no PS1 em .bashrc

3

Em .bashrc

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

Eu entendo ${debian_chroot:+($debian_chroot)}\u@\h: \w , mas não \[\e]0; . O que isso faz?

    
por Lee 30.08.2016 / 18:39

2 respostas

5

O \e]0; é uma seqüência de escape; \e é substituído por ASCII 27 (ESC), então o terminal recebe os 4 caracteres ESC ] 0 ; diz ao xterm para definir o ícone e barra de título, que termina em BEL ( \a ).

Portanto, a seqüência \e]0;STUFFGOESHERE\a definirá o título do terminal como STUFFGOESHERE. No seu exemplo, ele definirá o título como usuário / host / caminho.

FWIW, sequências de escape xterm estão documentadas em: link

    
por 30.08.2016 / 18:59
4

Os caracteres \e[0; na linha

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

são interpretados pelo shell (equacionando \e a 3 o caractere ASCII ESC escape ), iniciando uma seqüência de escape. A seqüência termina em \a (da mesma forma interpretada pelo shell \ 007 'sino ASCII BEL ).

O 0 é um parâmetro (para o que é conhecido como um comando do sistema operacional ), que informa ao terminal para alterar os títulos dos ícones e das janelas.

Tecnicamente, deve ser \e\ (ECMA-48), mas não foi assim que começou. Quando o recurso foi introduzido pela primeira vez em 1986, xterm terminou o título no primeiro caractere não imprimível. O \a foi reconhecido como um terminador de cadeia pelo xterm desde X11R4 em 1989 (quando parâmetros separados 1 e 2 foram adicionados para distinguir os títulos dos ícones e das janelas).

rxvt pegou isso alguns anos depois, e alguns anos depois o xterm foi modificado para também aceitar um terminador de cadeia padrão. Nenhum ponto específico foi feito no changelog, mas apareceu em ctlseqs.ms primeiro em agosto de 1996. Geralmente, quando outros terminais implementaram o recurso, eles aceitam apenas \a .

Sem o final, o caractere de escape isolado pode ser tratado como um erro de uma maneira específica do terminal (incluindo ignorar completamente o texto).

Leitura adicional:

por 31.08.2016 / 02:39