"Restablecer" colores del terminal después de salir / cerrar sesión

21

Cuando entro en un servidor remoto, me gusta que cambien los colores del terminal. Lo uso settermen mi archivo remoto ~ / .bashrc para hacer esto. Sin embargo, cuando I exit, los colores del terminal no se restablecen a los locales.

Resolví el problema, pero no estoy seguro de si es la mejor solución. Esto es lo que se me ocurrió.

En el ~ / .bash_logout en el servidor remoto, puse:

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

Solo por curiosidad: ¿Alguien sabe de una mejor manera? (Obtuve la echo -e "\033[0m"línea de http://edoceo.com/liber/linux-bash-shell )

dgo.a
fuente
2
Te recomiendo que uses tputpara cambiar los colores. Búscalo.
Ram
¿Qué colores estás configurando y cómo? ¿Te refieres a tu prompt ( PS1)?
terdon el

Respuestas:

37

Mejor:
tput sgr0normalmente es el equivalente deecho -en "\e[0m"

La diferencia es que el uso de tput se adaptará si el tipo de terminal no es ANSI, y se ha configurado correctamente.

man 5 terminfo para más códigos para usar.

Allí encontrarás 'reset', así que tput resetdebería funcionar.


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

(Las impresiones de PRUEBA deben tener colores de fondo / primer plano intercambiados, no se pueden mostrar aquí, solo "emulados")


Encontré otra opción para esto , una forma menos geek:

El paquete util-linux (en ubuntu) contiene setterm(utilidad de shell).

escriba setterm --helpy encontrará las opciones disponibles.


La salida REAL de tput sgr0

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

... depende de cómo esté configurado su terminal, por ejemplo

$ set | grep TERM
TERM=xterm-256color

por lo anterior


$ infocmp ansi
    Reconstruido a través de infocmp desde el archivo: / lib / terminfo / a / ansi
ansi | ansi / pc-term compatible con color,
    am, mc5i, mir, msgr,
    colores # 8, cols # 80, it # 8, líneas # 24, ncv # 3, pares # 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, parpadeo = \ E [5m, negrita = \ E [1m, cbt = \ E [Z, claro = \ 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, copa = \ 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, inicio = \ 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).

Explore más, comience aquí tal vez https://en.wikipedia.org/wiki/Terminfo
Guía del programador para ncurses - google books

nota: ncurses proporciona interfaces para termcap, terminfo y, por supuesto, maldiciones.

Hannu
fuente
echo -e "\e \033 \x1b " | od -t x1z- ¿Cuál es más legible?
Hannu
tput sgr0devuelve algo diferente de \e[0m, mira esto: a=$(tput sgr0); set | grep ^a=y mira el resultado. ¿También puede decir cuál es la setterm opción equivalente para \e[0m?
SebMa
Tenga en cuenta que \e[0mo lo mismo \e[mes para terminales de tipo ANSI, tput sgr0 podría proporcionarle algo completamente diferente si su terminal no es ANSI. No puede estar seguro ni siquiera para los terminales ANSI, ya que el que realmente está utilizando podría haberse configurado de manera diferente en la base de datos terminfo.
Hannu
TERM=ansi a=$(tput sgr0); set | grep ^a=y el resultado es a=$'\E[0;10m'. Esto se ve diferente de\e[0m
SebMa
¿Si? "No puede estar seguro ni siquiera para los terminales ANSI, ya que el que realmente está utilizando podría haberse configurado de manera diferente en la base de datos de terminfo". Como puede ver arriba, esa variante tiene \e(B\e[m: ¡espere diferencias!
Hannu
17

Creo que estás buscando el comando de consola "reset"

usuario7963
fuente
2
El problema con el reinicio es que borra todo el contenido de la consola, y a veces eso no es lo que quieres.
niglesias
3

Puede encontrar el uso de esto en el .bash_logout remoto más apropiado:

tput init

Puede ser bueno tener esto en cada .bash_logout como una buena práctica general (y tal vez incluso en ~ / .profile)

niglesias
fuente
2

Si coloca los colores que desea en el ~ / .bashrc de la cuenta remota, debería tener efecto al iniciar sesión y volver a su configuración local al salir.

Itzjak
fuente
Yo también pensé lo mismo. Pero, no volvieron atrás cuando salí de ssh. Tal vez sea porque estaba usando setterm en .bashrc (usando el terminal GNOME). ¿Utiliza un método diferente para configurar el esquema de color en .bashrc?
dgo.a
Si está utilizando GNOME, supongo que ejecuta Linux. Yo uso Ubuntu, pero supongo que el proceso es bastante similar en todas las distribuciones. Puede hacer una copia de seguridad del archivo y luego abrirlo en un editor de texto y editar el contenido comenzando en la línea que dice PS1 =. Puede encontrar información en novell.com/coolsolutions/tools/17142.html . Le dice más de lo que siempre quiso saber sobre el archivo .bashrc.
Itzjak el
1
UH no. La configuración del terminal no se basa en lo que está haciendo en el terminal. A ellos (¡antromorfizar!) No les importa si eres local, remoto, trabajas en swahili o algo así. Es una simple máquina de estados. Como usaste un comando para cambiarlo a algo ... tienes que usar un comando para cambiarlo a otra cosa. La solución .bash_logout es la mejor manera, a menos que desee escribir un alias / función para ajustar sus comandos ssh. Blech Más fácil, haga que su configuración (cualesquiera que sean) sea parte de su salida de solicitud de PS1. Cuando inicie sesión en una máquina, cambiará, cerrará sesión, se restablecerá la solicitud anterior.
lornix