Reter cores do prompt do bash ao iniciar uma sessão de tela

11

Quando ssh em uma caixa do Ubuntu Lucid, o prompt é bonito, com cores. Tudo é o padrão, tanto quanto eu sei. Aqui está a minha tela externa de $ PS1:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@dev\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

Antes de conectar com a tela

Mas depois que eu começo a tela, as cores desaparecem. Todo o resto está bem, e minha tela pode suportar cores (observe que o .e ..aqui ls -alsão azuis), mas o prompt não. Em teoria, tudo deve ser exatamente o mesmo. $ PS1 na tela interna:

${debian_chroot:+($debian_chroot)}\u@dev:\w\$

após triagem em

EDIT: Esta é apenas uma tela simples de baunilha.

chmullig
fonte
É uma tela simples de baunilha ou você tem o byobu instalado? (. Embora este assunto não importa)
Belacqua
2
Imprime echo $PS1a mesma coisa dentro e fora da tela?
Mikel
$ PS1 é realmente diferente. Pergunta editada para incluir isso.
chmullig

Respostas:

16

Você pode editar a seguinte linha no seu .bashrc (é o número 39 no meu .bashrc):

#force_color_prompt=yes

Mudar para:

force_color_prompt=yes

Isso pode ser irritante se você fizer login em algum lugar onde a cor não é suportada, mas acho altamente improvável.

LasseValentini
fonte
Perfeito, isso fez por mim. Percebo que é problemático fazer login de algum lugar sem cor, mas isso será muito raro. Obrigado!
21711 chhullig
A alteração precisa ser feita na máquina do servidor, não no cliente.
Adam Ryczkowski 27/10/12
3

O .screenrcarquivo é um mistério para mim. O meu é um livro que eu copiei dos internets. No entanto, vejo algumas linhas que parecem relevantes para o seu problema:

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Acho que se você adicionar as linhas acima às suas, obterá cores. Aqui está o meu todo .screenrcpara referência:

jake@daedalus:~$ cat .screenrc 
startup_message off # skip splash screen
vbell off # Kill the annoying dog

# Voodoo
hardstatus alwayslastline
hardstatus string '%{= wk}%-Lw%{= KW}%50>%n%f* %t%{= dK}%+Lw%<'

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color 
defbce "on"
djeikyb
fonte
2

Sua PS1configuração deve ser colocada .bashrc, não .bash_profile.

Se esse não for o problema, edite sua pergunta para incluir a linha que você definiu PS1.

Você também pode tentar executar estes:

echo "$TERM"                                 # will probably print "screen"
tput setaf 2 | cat -vte                      # should print "^[[32m"
echo "$(tput setaf 2)"green"$(tput sgr0)"    # should print "green" in green
Mikel
fonte
2

A tela normalmente usa um tipo de terminal especial, como "tela", ou se você o definir em .screenrc, "screen-256color".

Basta procurar no seu .bashrc a declaração do caso de detecção de cores e adicionar tela à lista.

Por exemplo, algo como isto:

case "$TERM" in
    xterm)
        color_prompt=yes
        ;;
    screen)
        color_prompt=yes
        ;;
    *256*) 
        color_prompt=yes
        ;;
esac

Eu uso tipos de terminais de 256 cores, então só preciso da declaração de 256 casos, pois ela captura xterm-256color, gnome-256color e screen-256color. Sua milhagem pode variar. 🙂

m0j0
fonte
1

Adicione isso ao seu ~ / .screenrc

shell -$SHELL
Cam
fonte
+1. Isso me fez voltar minha boa aparência festa pronta no OS X.
funroll
0

Chamando a tela com -T xtermobras para mim, simplesmente:

screen -T xterm

Não há necessidade de modificar nenhum arquivo.

twildfarmer
fonte