O .bashrc está configurando corretamente o título do terminal gráfico?

0

Do padrão .bashrc é isso:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac 

O resultado é examinado emitindo o comando echo:

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

Parece que a inserção condicional ${debian_chroot:+($debian_chroot)} será executada para o prompt da linha de comando, mas não para o título do terminal. Parece que o autor .bashrc pretendia que ele fosse exibido em ambos os lugares à esquerda de user@host , mas, na verdade, ele não chegou aos dois locais. A avaliação de debian_chroot aconteceu na definição de PS1, mas não foi feita para ser avaliada naquele momento, mas sim para ser avaliada no momento da solicitação. A raiz do problema é que, ao criar as strings "" , as cotações são avaliadas e '' , aspas, não. A avaliação foi antecipada porque a coisa toda incluída em \[ \] foi feita para o título. A interpretação está correta?

    
por H2ONaCl 30.12.2015 / 00:59

2 respostas

3

Eu diria que a coisa toda é irrelevante. debian_chroot está definido em /etc/bash.bashrc . É justo apostar que, no curso normal das coisas, se a variável foi definida, um novo shell foi iniciado - por que /etc/bash.bashrc seria originado de outra forma? E nesse caso, ~/.bashrc seria originado também. Portanto, a variável é definida quando PS1 é definido e modificado nas linhas mostradas ou não, e não será. O efeito é o mesmo.

Eu só posso imaginar por que o desenvolvedor original usou aspas simples ao definir PS1 em primeiro lugar. Presumivelmente, o desenvolvedor aprendeu cautela e usa "" apenas quando necessário, o que é quando modifica PS1 .

Observe que :+ significa apenas não fazer nada se a variável não estiver definida.

    
por muru 30.12.2015 / 01:39
1
A inserção de

${debian_chroot:+($debian_chroot)} depende da presença da variável $debian_chroot ou do arquivo /etc/debian_chroot .

Aqui está um exemplo simples. Na imagem abaixo, eu estou conectado através do ssh ao meu Raspberry Pi com o Ubuntu Snappy, que tem $debian_chroot variable set (por padrão), enquanto o Ubuntu do meu laptop não tem. Você pode ver o prompt resultante nas guias e, em ambos os casos, a variável $TERM is xterm

Agora, se a variável $TERM fosse outra, ela não alteraria o título do terminal da GUI. Isso pode estar se conectando a uma sessão screen , por exemplo, onde variável $TERM é screen .

    
por Sergiy Kolodyazhnyy 30.12.2015 / 01:16