$ PS1 no Ubuntu VM não corresponde ao prompt real

4

Estou executando uma VM do Ubuntu em Virtual Box e Vagrant :

vagrant@lucid64:~$ uname -a
Linux lucid64 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux

Minha variável $ PS1 não corresponde exatamente ao prompt e é muito mais complexa:

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

Estou procurando uma explicação da relação entre o $ PS1 e meu prompt, que é $USER@$HOST:$PWD\$ , como pode ser visto acima.

Por exemplo, no meu laptop comum, que hospeda essa VM e é um Mac, ela é simples e limpa da seguinte forma:

~@12:10:20>echo $PS1
\w@\t>
    
por amphibient 15.08.2013 / 21:11

2 respostas

6

O padrão $PS1 no Ubuntu consiste em três partes:

  • \[\e]0;\u@\h: \w\a\]

    Esta é uma seqüência de escape que irá definir o texto do título do terminal para $USER@$HOST: $PWD .

    \[ e \] indicam o início e o fim de uma sequência de caracteres não imprimíveis.

    \e é um caractere de escape ASCII.

    ]0; é a sequência de escape específica para defina o ícone e o título do terminal em xterm terminais compatíveis

    \u expande para o nome de usuário atual.

    @ é um literal @.

    \h expande para o nome do host.

    : é um caractere de dois pontos literal.

    \w expande para o diretório de trabalho atual.

    \a é um caractere de campainha ASCII.

  • ${debian_chroot:+($debian_chroot)}

    Se você estiver em um ambiente chroot, isso se expandirá para o nome do chroot entre parênteses.

    ${var:+OTHER} é avaliado como $OTHER se var estiver definido, caso contrário, como cadeia nula. $debian_chroot é uma variável inicializada em /etc/bash.bashrc para o conteúdo do arquivo /etc/debian_chroot . Assim, se o seu ambiente chroot incluir este arquivo, o prompt incluirá o conteúdo desse arquivo como uma indicação para o chroot no qual o shell opera atualmente.

  • \u@\h:\w\$

    Esse é o prompt real que você normalmente vê.

    \u , @ , \h , : , \w são como acima.

    \$ se expande para um sinal numérico # se o uid efetivo for zero (ou seja, usuário é root), caso contrário, ele se expandirá para um sinal de $.

Recursos

por 15.08.2013 / 22:21
3

É provavelmente mais fácil quebrar isso!

Nesta primeira seção:

\[\e]0;\u@\h: \w\a\]

A primeira parte disso (o \[\e]0; bit) contém caracteres de controle do terminal (geralmente usados para cores no prompt do bash e para atualizar os títulos das janelas, entre outras coisas - explicarei mais abaixo).

A segunda parte (o \u@\h: ) fornecerá a parte user@host do prompt, enquanto o \w ecoará o caminho do diretório de trabalho atual. O \a é um caractere de sino ASCII .

Uma pesquisa rápida revelou que, essencialmente, essa parte do seu $ PS1 é dizer ao bash para atualize o título da janela do terminal para o mesmo valor que o seu prompt como este . (Eu sei que o shell mostrado é zsh , mas o mesmo princípio se aplica.) Basicamente, toda a primeira 'frase' é atualizar o título da janela atual.

${debian_chroot:+($debian_chroot)}

A parte acima significa simplesmente que "se a variável $debian_chroot estiver definida (ou seja, não nula), inclua essa cadeia no prompt". Tenho quase certeza de que a variável $debian_chroot sempre carrega um valor quando o sistema está sendo chrootado. Mais informações aqui

\u@\h:\w\$

Esta última seção cria o prompt padrão user@host: ~/$ .

HTH

Edit: whoops, parece que alguém me bateu para ele.

    
por 15.08.2013 / 22:50

Tags