Conserver les couleurs d'invite bash lors du démarrage d'une session d'écran

11

Quand je ssh dans une boîte Ubuntu Lucid, l'invite est toute jolie, avec des couleurs. Tout est le défaut, pour autant que je sache. Voici mon écran extérieur $ PS1:

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

Avant de vous connecter à l'écran

Mais une fois que je démarre l'écran, les couleurs disparaissent. Tout le reste va bien, et mon écran peut prendre en charge les couleurs (notez que le .et ..dans ce ls -alsont bleu), mais l'invite ne l'est pas. En théorie, tout devrait être exactement le même. $ PS1 à l'intérieur de l'écran:

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

après projection

EDIT: Ceci est tout simplement un écran vanille.

chmullig
la source
Cet écran est-il simple, ou avez-vous installé byobu? (Bien que cette question ne compte pas.)
belacqua
2
Imprime-t-il echo $PS1la même chose à l'intérieur de l'écran et à l'extérieur de l'écran?
Mikel
$ PS1 est en effet différent. Question modifiée pour inclure cela.
chmullig

Réponses:

16

Vous pouvez modifier la ligne suivante dans votre .bashrc (c'est # 39 dans mon .bashrc):

#force_color_prompt=yes

Changer pour:

force_color_prompt=yes

Cela pourrait être gênant si vous vous connectez depuis un endroit où la couleur n'est pas prise en charge, mais je trouve cela très peu probable.

LasseValentini
la source
Parfait, ça l'a fait pour moi. Je peux voir que cela pose problème si je me connecte depuis un endroit sans couleur, mais cela va être assez rare. Merci!
chmullig
La modification doit être effectuée sur la machine serveur, pas sur le client.
Adam Ryczkowski
3

Le .screenrcdossier est un mystère pour moi. Le mien est un charabia que j'ai copypasté des internets. Cependant, je vois quelques lignes qui semblent pertinentes pour votre problème:

# 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'

Je pense que si vous ajoutez les lignes ci-dessus aux vôtres, vous obtiendrez de la couleur. Voici mon tout .screenrcpour référence:

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
la source
2

Votre PS1réglage doit être placé dedans .bashrc, non .bash_profile.

Si ce n'est pas le problème, veuillez modifier votre question pour inclure la ligne que vous avez définie PS1.

Vous pouvez également essayer de les exécuter:

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
la source
2

L'écran utilise normalement un type de terminal spécial, tel que "écran", ou si vous le définissez dans votre .screenrc, "screen-256color".

Recherchez simplement dans votre .bashrc la déclaration de cas de détection de couleur et ajoutez un écran à la liste.

Par exemple, quelque chose comme ceci:

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

J'utilise des types de terminaux 256 couleurs, j'ai donc juste besoin de l' instruction 256 case, car elle attrape xterm-256color, gnome-256color et screen-256color. Votre kilométrage peut varier. 🙂

m0j0
la source
1

Ajoutez ceci à votre ~ / .screenrc

shell -$SHELL
Came
la source
+1. Cela m'a fait retrouver ma belle invite bash sous OS X.
funroll
0

Invoquer l'écran avec des -T xtermœuvres pour moi, donc simplement:

screen -T xterm

Pas besoin de modifier les fichiers.

twildfarmer
la source