«Réinitialiser» les couleurs du terminal après la sortie / déconnexion ssh

21

Quand je ssh dans un serveur distant, j'aime que les couleurs du terminal changent. J'utilise settermsur mon fichier ~ / .bashrc distant pour faire cela. Cependant, lorsque je exit, les couleurs de terminal ne sont pas réinitialisées aux couleurs locales.

J'ai résolu le problème, mais je ne sais pas si c'est la meilleure solution. Voilà ce que je pourrais trouver.

Sur le ~ / .bash_logout sur le serveur distant, je mets:

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

Par curiosité: quelqu'un connaît-il un meilleur moyen? (J'ai obtenu la echo -e "\033[0m"ligne de http://edoceo.com/liber/linux-bash-shell )

dgo.a
la source
2
Je vous recommande tputplutôt d' utiliser pour changer les couleurs. Cherchez-le.
Ram
Quelles couleurs définissez-vous et comment? Voulez-vous dire votre invite ( PS1)?
terdon

Réponses:

37

Mieux:
tput sgr0est normalement l'équivalent deecho -en "\e[0m"

La différence est que l'utilisation de tput s'adaptera si le type de terminal n'est pas ANSI - et qu'il a été configuré correctement.

man 5 terminfo pour plus de codes à utiliser.

Là-bas, vous trouverez «réinitialiser» et tput resetdevrait donc fonctionner.


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

(Les impressions TEST doivent avoir des couleurs d'arrière-plan / de premier plan permutées, ne peuvent pas être affichées ici - uniquement "émulées")


Trouvé une autre option pour cela , une manière moins geek:

le paquet util-linux (sur ubuntu) contient setterm(utilitaire shell).

tapez setterm --helpet vous trouverez les options disponibles.


La sortie RÉELLE de tput sgr0

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

... dépend de la configuration de votre terminal, par ex.

$ set | grep TERM
TERM=xterm-256color

pour ce qui précède.


$ infocmp ansi
    Reconstruit via infocmp à partir du fichier: / lib / terminfo / a / ansi
ansi | ansi / pc-term compatible avec la couleur,
    suis, mc5i, mir, msgr,
    couleurs # 8, cols # 80, it # 8, lignes # 24, ncv # 3, paires # 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, clignotement = \ E [5m, bold = \ 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 [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).

Explorez plus, commencez ici peut-être https://en.wikipedia.org/wiki/Terminfo
Guide du programmeur de ncurses - Google Books

note: ncurses fournit des interfaces pour termcap, terminfo et bien sûr curses.

Hannu
la source
echo -e "\e \033 \x1b " | od -t x1z- lequel est le plus lisible?
Hannu
tput sgr0renvoie quelque chose de différent \e[0m, regardez ceci: a=$(tput sgr0); set | grep ^a=et voyez le résultat. Pouvez-vous également indiquer à quoi sert l' setterm option équivalente \e[0m?
SebMa
Notez que \e[0mou l'équivalent \e[mest pour les terminaux de type ANSI, tput sgr0 peut vous donner quelque chose de complètement différent si votre terminal n'est pas ANSI. Vous ne pouvez pas être sûr, même pour les terminaux ANSI, car celui que vous utilisez réellement peut avoir été configuré différemment dans la base de données terminfo.
Hannu
TERM=ansi a=$(tput sgr0); set | grep ^a=et le résultat est a=$'\E[0;10m'. Cela semble différent de\e[0m
SebMa
Oui? "Vous ne pouvez pas être sûr, même pour les terminaux ANSI, car celui que vous utilisez peut-être a été configuré différemment dans la base de données terminfo." Comme vous pouvez le voir ci-dessus, cette variante a \e(B\e[m- attendez-vous à des différences!
Hannu
17

Je crois que vous recherchez une commande de console "reset"

user7963
la source
2
Le problème avec la réinitialisation est qu'elle efface tout le contenu de la console, et parfois ce n'est pas ce que vous voulez.
niglesias
3

Vous trouverez peut-être plus approprié d'utiliser ceci dans le .bash_logout distant:

tput init

Il pourrait être bon de l'avoir sur chaque .bash_logout comme bonne pratique générale (et peut-être même sur ~ / .profile)

Niglesias
la source
2

Si vous mettez les couleurs souhaitées dans le ~ / .bashrc du compte distant, cela devrait prendre effet à la connexion et revenir à vos paramètres locaux à la sortie.

Yitzchak
la source
Je le pensais aussi. Mais, ils ne sont pas revenus quand j'ai quitté ssh. C'est peut-être parce que j'utilisais setterm dans .bashrc (en utilisant le terminal GNOME). Utilisez-vous une méthode différente pour définir le jeu de couleurs dans .bashrc?
dgo.a le
si vous utilisez GNOME, je suppose que vous exécutez linux. J'utilise Ubuntu, mais je suppose que le processus est assez similaire dans les distributions. Vous pouvez sauvegarder le fichier puis l'ouvrir dans un éditeur de texte et modifier le contenu en commençant par la ligne qui indique PS1 =. Vous pouvez trouver des informations sur novell.com/coolsolutions/tools/17142.html . Il vous en dit plus que vous n’avez jamais voulu en savoir sur le fichier .bashrc.
Yitzchak
1
Euh non. Les paramètres du terminal ne sont pas basés sur ce que vous faites dans le terminal. Ils (anthromorphisant!) Ne se soucient pas si vous êtes local, éloigné, travaillez en swahili ou quoi que ce soit. C'est une simple machine à états. Puisque vous avez utilisé une commande pour la changer en quelque chose ... vous devez utiliser une commande pour la changer en quelque chose d'autre. La solution .bash_logout est le meilleur moyen, sauf si vous voulez écrire un alias / fonction pour encapsuler vos commandes ssh. Blech. Plus facile, intégrez vos paramètres (quels qu'ils soient) à la sortie de votre invite PS1. Lorsque vous vous connectez à une machine, cela changera, déconnectez-vous, l'ancienne invite sera rétablie.
lornix