Farben des Terminals nach Beenden / Abmelden von ssh zurücksetzen

21

Wenn ich einen Remote-Server anschalte, möchte ich, dass sich die Farben des Terminals ändern. Ich verwende settermfür meine Remote ~ / .bashrc-Datei, um dies zu erledigen. Bei I exitwerden die Terminalfarben jedoch nicht auf die lokalen Farben zurückgesetzt.

Ich habe das Problem gelöst, bin mir aber nicht sicher, ob es die beste Lösung ist. Das könnte ich mir einfallen lassen.

Im ~ / .bash_logout auf dem Remote-Server habe ich Folgendes angegeben:

echo -e "\033[0m"
/usr/bin/clear

Nur aus Neugier: Kennt jemand einen besseren Weg? (Ich habe die echo -e "\033[0m"Zeile von http://edoceo.com/liber/linux-bash-shell )

dgo.a
quelle
2
Ich empfehle, tputstattdessen die Farben zu ändern. Schlag es nach.
Ram
Welche Farben setzen Sie und wie? Meinst du deine Eingabeaufforderung ( PS1)?
Terdon

Antworten:

37

Besser:
tput sgr0ist normalerweise das Äquivalent vonecho -en "\e[0m"

Der Unterschied besteht darin, dass sich die Verwendung von tput anpasst, wenn der Terminaltyp nicht ANSI ist - und er ordnungsgemäß eingerichtet wurde.

man 5 terminfo für mehr Codes zu verwenden.

Dort finden Sie "Zurücksetzen", tput resetsollte also funktionieren.


$ echo -e "\ e [7m TEST \ e [0m"  
 TEST   
$ echo -e "$ (tput rev) TEST $ (tput sgr0)"  
 TEST   
$   

(Die TEST-Ausdrucke sollten vertauschte Hintergrund- / Vordergrundfarben haben, können hier nicht angezeigt werden - nur "emuliert")


Habe eine andere Option dafür gefunden , eine weniger geekige Art:

Das Paket util-linux (unter Ubuntu) enthält setterm(Shell-Dienstprogramm).

Geben setterm --helpSie ein und finden Sie die verfügbaren Optionen.


Die IST-Ausgabe von tput sgr0

$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<
0000006

... hängt davon ab, wie Ihr Terminal eingerichtet ist, z

$ set | grep TERM
TERM=xterm-256color

für die oben genannten.


$ infocmp ansi
    Rekonstruiert über infocmp aus der Datei: / lib / terminfo / a / ansi
ansi | ansi / pc-term farbverträglich,
    bin, mc5i, mir, msgr,
    Farben # 8, Cols # 80, It # 8, Linien # 24, NCV # 3, Paare # 64,
    acsc = + \ 020 \, \ 021- \ 030. Y0 \ 333` \ 004a \ 261f \ 370g \ 361h \ 260j \ 331k \ 277l \ 332m \ 300n \ 305o ~ p \ 304q \ 304r \ 304s_t \ 303u \ 264v \ 301w \ 302x \ 263y \ 363z \ 362 {\ 343 | \ 330} \ 234 ~ \ 376,
    bel = ^ G, blinken = \ E [5m, fett = \ E [1m, cbt = \ E [Z, klar = \ E [H \ E [J,
    cr = ^ M, cub = \ E [% p1% dD, cub1 = \ E [D, cud = \ E [% p1% dB, cud1 = \ E [B,
    cuf = \ E [% p1% dC, cuf1 = \ E [C, cup = \ E [% i% p1% d;% p2% dH,
    cuu = \ E [% p1% dA, cuu1 = \ E [A, dch = \ E [% p1% dP, dch1 = \ E [P,
    dl = \ E [% p1% dM, dl1 = \ E [M, ech = \ E [% p1% dX, ed = \ E [J, el = \ E [K,
    el1 = \ E [1K, home = \ E [H, hpa = \ E [% i% p1% dG, ht = \ E [I, hts = \ EH,
    ich = \ E [% p1% d @, il = \ E [% p1% dL, il1 = \ E [L, ind = ^ J,
    indn = \ E [% p1% dS, invis = \ E [8 m, kbs = ^ H, kcbt = \ E [Z, kcub1 = \ E [D,
    kcud1 = \ E [B, kcuf1 = \ E [C, kcuu1 = \ E [A, khome = \ E [H, kich1 = \ E [L,
    mc4 = \ E [4i, mc5 = \ E [5i, nel = \ r \ E [S, op = \ E [39; 49m,
    rep =% p1% c \ E [% p2% {1}% -% db, rev = \ E [7m, rin = \ E [% p1% dT,
    rmacs = \ E [10 m, rmpch = \ E [10 m, rmso = \ E [m, rmul = \ E [m,
    s0ds = \ E (B, s1ds = \ E) B, s2ds = \ E * B, s3ds = \ E + B,
    setab = \ E [4% p1% dm, setaf = \ E [3% p1% dm,
    sgr = \ E [0; 10%?% p1% t; 7%;%?% p2% t; 4%;%?% p3% t; 7%;%?% p4% t; 5%;%? % p6% t; 1%;%?% p7% t; 8%;%?% p9% t; 11%; m,
    sgr0 = \ E [0; 10 m, smacs = \ E [11 m, smpch = \ E [11 m, smso = \ E [7 m,
    smul = \ E [4m, tbc = \ E [3g, u6 = \ E [% i% d;% dR, u7 = \ E [6n,
    u8 = \ E [?% [; 0123456789] c, u9 = \ E [c, vpa = \ E [% i% p1% dd,

SEE ALSO (man pages):
       tic(1) infocmp(1), captoinfo(1), infotocap(1), toe(1),  
       ncurses(3NCURSES), term(5).  terminfo(5).

Weitere Informationen finden Sie hier: https://en.wikipedia.org/wiki/Terminfo
Programmiererhandbuch für ncurses - Google Books

Hinweis: ncurses bietet Schnittstellen für termcap, terminfo und natürlich curses.

Hannu
quelle
echo -e "\e \033 \x1b " | od -t x1z- Was ist am besten lesbar?
Hannu
tput sgr0gibt etwas anderes zurück als \e[0m, sieh dir das an: a=$(tput sgr0); set | grep ^a=und sieh dir das Ergebnis an. Können Sie auch bitte angeben, für was die entsprechende setterm Option ist \e[0m?
SebMa
Beachten Sie, dass \e[0moder gleich \e[mfür ANSI Typ - Terminals, könnte tput sgr0 geben Ihnen etwas ganz anderes , wenn Ihr Terminal ist nicht ANSI. Sie können selbst für ANSI-Terminals nicht sicher sein, da das von Ihnen tatsächlich verwendete Terminal möglicherweise in der terminfo-Datenbank anders eingerichtet wurde.
Hannu
TERM=ansi a=$(tput sgr0); set | grep ^a=und das Ergebnis ist a=$'\E[0;10m'. Dies sieht anders aus als\e[0m
SebMa
Ja? "Sie können nicht einmal für ANSI-Terminals sicher sein, da das, das Sie tatsächlich verwenden, möglicherweise in der terminfo-Datenbank anders eingerichtet wurde." Wie Sie oben sehen können, hat diese Variante \e(B\e[m- rechnen Sie mit Unterschieden!
Hannu
17

Ich glaube, Sie suchen nach "Reset" -Konsolenbefehl

user7963
quelle
2
Das Problem beim Zurücksetzen ist, dass der gesamte Konsoleninhalt gelöscht wird, und manchmal ist dies nicht das, was Sie wollen.
Niglesias
3

Möglicherweise finden Sie dies in der entfernten .bash_logout-Datei angemessener:

tput init

Es kann gut sein, dies in jedem .bash_logout als allgemeine bewährte Methode (und vielleicht sogar in ~ / .profile) zu haben.

Niglesias
quelle
2

Wenn Sie die gewünschten Farben in das ~ / .bashrc des Remote-Kontos einfügen, sollte dies beim Anmelden wirksam werden und beim Beenden zu Ihren lokalen Einstellungen zurückkehren.

Yitzchak
quelle
Das habe ich auch gedacht. Aber sie sind nicht zurückgekehrt, als ich ssh verließ. Vielleicht liegt es daran, dass ich setterm in .bashrc verwendet habe (mit GNOME-Terminal). Verwenden Sie eine andere Methode zum Festlegen des Farbschemas in .bashrc?
dgo.a
Wenn Sie GNOME verwenden, gehe ich davon aus, dass Sie Linux ausführen. Ich benutze Ubuntu, aber ich vermute, dass der Prozess in den Distributionen ziemlich ähnlich ist. Sie können die Datei sichern und dann in einem Texteditor öffnen und den Inhalt ab der Zeile PS1 = bearbeiten. Informationen finden Sie unter novell.com/coolsolutions/tools/17142.html . Hier erfahren Sie mehr, als Sie jemals über die .bashrc-Datei wissen wollten.
Yitzchak
1
Oh nein. Die Terminaleinstellungen basieren nicht auf dem, was Sie im Terminal tun. Es ist ihnen (anthromorphisierend!) Egal, ob Sie vor Ort sind, in der Ferne arbeiten, auf Suaheli arbeiten oder so. Es ist eine einfache Zustandsmaschine. Da Sie einen Befehl verwendet haben, um ihn in etwas zu ändern, müssen Sie einen Befehl verwenden, um ihn in etwas anderes zu ändern. Die Lösung .bash_logout ist der beste Weg, es sei denn, Sie möchten einen Alias ​​/ eine Funktion schreiben, die Ihre ssh-Befehle umschließt. Blech. Machen Sie Ihre Einstellungen (was auch immer sie sind) einfacher als Teil Ihrer PS1-Eingabeaufforderung. Wenn Sie sich bei einem Computer anmelden, ändert sich die Meldung, und die alte Eingabeaufforderung wird wiederhergestellt.
Lornix