"Ripristina" i colori del terminale dopo l'uscita / il logout di ssh


21

Quando mi immetto in un server remoto, mi piace cambiare i colori del terminale. Uso settermil mio file ~ / .bashrc remoto per farlo. Tuttavia, quando I exit, i colori dei terminali non vengono ripristinati a quelli locali.

Ho risolto il problema, ma non sono sicuro che sia la soluzione migliore. Questo è ciò che ho potuto inventare.

In ~ / .bash_logout sul server remoto, ho inserito:

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

Solo per curiosità: qualcuno conosce un modo migliore? (Ho preso la echo -e "\033[0m"linea da http://edoceo.com/liber/linux-bash-shell )


2
Ti consiglio tputinvece di cambiare colore. Cerca.
Ram

Quali colori stai impostando e come? Intendi il tuo prompt ( PS1)?
terdon,

Risposte:


37

Meglio:
tput sgr0è normalmente l'equivalente diecho -en "\e[0m"

La differenza è che l'uso di tput si adatterà se il tipo di terminale è diverso da ANSI - ed è stato impostato correttamente.

man 5 terminfo per più codici da utilizzare.

Lì troverai 'reset', quindi tput resetdovrebbe funzionare.


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

(Le stampe TEST dovrebbero avere i colori di sfondo / primo piano scambiati, non possono essere mostrati qui - solo "emulati")


Ho trovato un'altra opzione per questo , un modo meno geniale:

il pacchetto util-linux (su ubuntu) contiene setterm(utilità di shell).

digita setterm --helpe troverai le opzioni disponibili.


L'output effettivo di tput sgr0

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

... dipende dalla configurazione del terminale, ad es

$ set | grep TERM
TERM=xterm-256color

per quanto sopra.


$ infocmp ansi
    Ricostruito tramite infocmp dal file: / lib / terminfo / a / ansi
ansi | ansi / pc-term compatibile con il colore,
    sono, mc5i, mir, msgr,
    colors # 8, cols # 80, it # 8, righe # 24, ncv # 3, coppie # 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, blink = \ E [5m, grassetto = \ E [1m, cbt = \ E [Z, clear = \ 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 [8m, 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 [10m, rmpch = \ E [10m, 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; 10m, smacs = \ E [11m, smpch = \ E [11m, smso = \ E [7m,
    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).

Scopri di più, inizia qui forse https://en.wikipedia.org/wiki/Terminfo
Guida del programmatore a ncurses - google books

nota: ncurses fornisce interfacce per termcap, terminfo e ovviamente maledizioni.


echo -e "\e \033 \x1b " | od -t x1z- quale è più leggibile?
Hannu,

tput sgr0restituisce qualcosa di diverso da \e[0m, guarda questo: a=$(tput sgr0); set | grep ^a=e vedi il risultato. Puoi anche dire qual è l' setterm opzione equivalente per \e[0m?
SebMa,

Nota che \e[0mo uguale \e[mè per i terminali di tipo ANSI, tput sgr0 potrebbe darti qualcosa di completamente diverso se il tuo terminale non è ANSI. Non puoi essere sicuro nemmeno per i terminali ANSI, poiché quello che stai effettivamente usando potrebbe essere stato impostato in modo diverso nel database terminfo.
Hannu,

TERM=ansi a=$(tput sgr0); set | grep ^a=e il risultato è a=$'\E[0;10m'. Sembra diverso da\e[0m
SebMa,

Sì? "Non si può essere sicuri nemmeno per i terminali ANSI, poiché quello che si sta effettivamente utilizzando potrebbe essere stato impostato in modo diverso nel database terminfo." Come puoi vedere sopra, quella variante ha \e(B\e[m- aspettati differenze!
Hannu,

17

Credo che tu stia cercando il comando "reset" della console


2
Il problema con reset è che cancella tutto il contenuto della console, e talvolta non è quello che vuoi.
niglesias,

3

Potresti trovare questo usando nel remoto .bash_logout più appropriato:

tput init

Potrebbe essere utile avere questo su ogni .bash_logout come una buona pratica generale (e forse anche su ~ / .profile)


2

Se si inseriscono i colori desiderati nell' ~ / .bashrc dell'account remoto, questo dovrebbe avere effetto sull'accesso e ritornare alle impostazioni locali all'uscita.


L'ho pensato anch'io. Ma non sono tornati indietro quando sono uscito da ssh. Forse è perché stavo usando setterm in .bashrc (usando il terminale GNOME). Usi un metodo diverso per impostare la combinazione di colori in .bashrc?
dgo.a

se stai usando GNOME, suppongo tu esegua linux. Uso Ubuntu, ma suppongo che il processo sia abbastanza simile in tutte le distro. Puoi eseguire il backup del file, quindi aprirlo in un editor di testo e modificare il contenuto a partire dalla riga che indica PS1 =. Puoi trovare informazioni su novell.com/coolsolutions/tools/17142.html . Ti dice più di quanto tu abbia mai voluto sapere sul file .bashrc.
Yitzchak,

1
Uh, no. Le impostazioni del terminale non si basano su ciò che stai facendo nel terminale. A loro (antromorfizzante!) Non importa se sei locale, remoto, lavori in swahili o altro. È una semplice macchina a stati. Dato che hai usato un comando per cambiarlo in qualcosa ... devi usare un comando per cambiarlo in qualcos'altro. La soluzione .bash_logout è il modo migliore, a meno che tu non voglia scrivere un alias / funzione per racchiudere i tuoi comandi ssh. Blech. Più facile, rendi le tue impostazioni (qualunque esse siano) parte dell'output del prompt di PS1. Quando si accede a una macchina, cambierà, si disconnetterà, verrà ripristinato il vecchio prompt.
lornix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.