Beibehalten der Bash-Eingabeaufforderungsfarben beim Starten einer Bildschirmsitzung

11

Wenn ich in eine Ubuntu Lucid-Box ssh, ist die Eingabeaufforderung hübsch, mit Farben. Soweit ich weiß, ist alles die Standardeinstellung. Hier ist mein $ PS1-Außenbildschirm:

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

Vor dem Verbinden mit dem Bildschirm

Aber sobald ich den Bildschirm hochfahre, verschwinden die Farben. Alles andere ist in Ordnung und mein Bildschirm kann Farben unterstützen (beachten Sie, dass die .und ..in diesem ls -alblau sind), aber die Eingabeaufforderung ist nicht. Theoretisch sollte alles genau gleich sein. $ PS1 im Bildschirm:

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

nach dem Screening in

EDIT: Dies ist nur ein Vanille-Bildschirm.

chmullig
quelle
Ist das ein einfacher Vanille-Bildschirm oder haben Sie Byobu installiert? (Obwohl diese Angelegenheit keine Rolle spielt.)
Belacqua
2
Druckt echo $PS1das Gleiche innerhalb und außerhalb des Bildschirms?
Mikel
$ PS1 ist in der Tat anders. Bearbeitete Frage, um das aufzunehmen.
Chmullig

Antworten:

16

Sie können die folgende Zeile in Ihrem .bashrc bearbeiten (es ist # 39 in meinem .bashrc):

#force_color_prompt=yes

Ändern:

force_color_prompt=yes

Dies könnte möglicherweise ärgerlich sein, wenn Sie sich von einem Ort aus anmelden, an dem Farbe nicht unterstützt wird, aber ich finde es höchst unwahrscheinlich.

LasseValentini
quelle
Perfekt, das hat es für mich getan. Ich kann sehen, dass es problematisch ist, wenn ich mich von einem Ort ohne Farbe anmelde, aber das wird ziemlich selten sein. Vielen Dank!
Chmullig
Die Änderung muss auf dem Server durchgeführt werden, nicht auf dem Client.
Adam Ryczkowski
3

Die .screenrcDatei ist mir ein Rätsel. Meins ist ein Gobbledy-Buch, das ich aus dem Internet kopiert habe. Ich sehe jedoch einige Zeilen, die für Ihr Problem relevant erscheinen:

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

Ich denke, wenn Sie die obigen Zeilen zu Ihren hinzufügen, erhalten Sie Farbe. Hier ist mein ganzes .screenrcals Referenz:

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
quelle
2

Ihre PS1Einstellung sollte nicht platziert .bashrcwerden .bash_profile.

Wenn dies nicht das Problem ist, bearbeiten Sie Ihre Frage so, dass sie die von Ihnen festgelegte Zeile enthält PS1.

Sie können auch versuchen, diese auszuführen:

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
quelle
2

Screen verwendet normalerweise einen speziellen Terminaltyp, z. B. "screen", oder, wenn Sie ihn in Ihrem .screenrc einstellen, "screen-256color".

Suchen Sie einfach in Ihrer .bashrc nach der Fallanweisung für die Farberkennung und fügen Sie der Liste einen Bildschirm hinzu.

Zum Beispiel so etwas:

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

Ich verwende Terminaltypen mit 256 Farben, daher benötige ich nur die 256- case-Anweisung, da sie xterm-256color, gnome-256color und screen-256color abfängt. Ihr Kilometerstand kann variieren. 🙂

m0j0
quelle
1

Fügen Sie dies Ihrem ~ / .screenrc hinzu

shell -$SHELL
Nocken
quelle
+1. Dies brachte mich zurück zu meiner gut aussehenden Bash-Eingabeaufforderung unter OS X.
Funroll
0

Das Aufrufen des Bildschirms mit -T xtermfunktioniert für mich, also einfach:

screen -T xterm

Sie müssen keine Dateien ändern.

Twildfarmer
quelle