Por que o terminal do OS X Lion trata os códigos de prompt do PS1 de maneira diferente do Snow Leopard?

1

Eu tenho diferentes comportamentos no terminal com a mesma definição de prompt no Snow Leopard e Lion.

No meu sistema Snow Leopard, defino meu prompt de terminal em .profile da seguinte forma:

export PS1='\[\e[32;1m\]\w\$\[\e[0m\] '

Isso cria um prompt verde sobre preto, com a saída de comandos normais sendo branco sobre preto por padrão. (Por exemplo, se eu digitar man recebo a saída Que página de manual você quer? em branco sobre preto.)

No meu sistema Lion, com o mesmo .profile, recebo o mesmo prompt verde sobre preto, mas a cor do texto não volta mais para branco sobre preto. (Se eu digitar man recebo a saída Que página de manual você quer? no mesmo verde sobre preto que o prompt).

Por que o terminal da Lion se comporta de maneira diferente - e como faço para alterar o texto de volta para branco sobre preto?

    
por Ghopper21 23.02.2012 / 20:08

2 respostas

1
Resposta curta é que, tanto quanto eu posso dizer, não há uma diferença depois de tudo. O problema durante todo esse tempo foi que minhas preferências do Terminal tinham a cor básica do texto definida como verde brilhante!

    
por 16.07.2013 / 17:00
2

Uma maneira melhor (porque é mais portável entre upgrades e sistemas diferentes) de lidar com as configurações de prompt é usando tput com códigos terminfo para sempre obter os códigos apropriados para o seu tipo de termo. A partir da página man "usa o banco de dados terminfo para tornar os valores dos recursos e informações dependentes de terminal disponíveis para o shell"

Aqui está um exemplo do meu .profile

red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 4)
reset=$(tput sgr0)
PS1="\[$red\]\u\[$reset\]@\[$green\]\h\[$reset\]:\[$blue\]\w\[$reset\]\$ "

da página man do terminfo, os códigos setaf são

   set_a_foreground             setaf       AF       Set foreground
                                                     color to #1, using
                                                     ANSI escape

Veja tput(1) e terminfo(5) para saber mais sobre o que você pode fazer com isso.

    
por 16.07.2013 / 06:54