"Redefinir" as cores do terminal após ssh sair / sair

21

Quando ssh em um servidor remoto, gosto de mudar as cores do terminal. Eu uso settermno meu arquivo ~ / .bashrc remoto para fazer isso. No entanto, quando eu exit, as cores do terminal não são redefinidas para as locais.

Resolvi o problema, mas não tenho certeza se é a melhor solução. Isso é o que eu poderia inventar.

No arquivo ~ / .bash_logout no servidor remoto, coloquei:

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

Apenas por curiosidade: alguém sabe de uma maneira melhor? (Eu recebi a echo -e "\033[0m"linha em http://edoceo.com/liber/linux-bash-shell )

dgo.a
fonte
2
Eu recomendo que você use tputpara mudar as cores. Procure.
Ram
Que cores você está definindo e como? Você quer dizer o seu prompt ( PS1)?
terdon

Respostas:

37

Melhor:
tput sgr0normalmente é o equivalente aecho -en "\e[0m"

A diferença é que o uso do tput se adaptará se o tipo de terminal for diferente de ANSI - e foi configurado corretamente.

man 5 terminfo para mais códigos usar.

Lá você encontrará 'reset', então tput resetdeve funcionar.


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

(As impressões TEST devem ter trocado as cores de segundo plano / primeiro plano, não podem ser mostradas aqui - apenas "emuladas")


Encontrou outra opção para isso , de uma maneira menos nerd:

o pacote util-linux (no ubuntu) contém setterm(utilitário shell).

digite setterm --helpe você encontrará as opções disponíveis.


A saída REAL de tput sgr0

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

... depende de como o seu terminal está configurado, por exemplo

$ set | grep TERM
TERM=xterm-256color

para o acima.


$ infocmp ansi
    Reconstruído via infocmp do arquivo: / lib / terminfo / a / ansi
ansi | ansi / pc-term compatível com cores,
    sou, mc5i, mir, msgr,
    cores # 8, cols # 80, # 8, linhas # 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, intermitente = \ E [5m, negrito = \ 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, copo = \ 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, casa = \ 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 mais, comece aqui talvez https://en.wikipedia.org/wiki/Terminfo
Guia do programador para ncurses - google books

nota: ncurses fornece interfaces para termcap, terminfo e, claro, maldições.

Hannu
fonte
echo -e "\e \033 \x1b " | od -t x1z- qual é o mais legível?
Hannu 14/05
tput sgr0retorna algo diferente de \e[0m, veja isto: a=$(tput sgr0); set | grep ^a=e veja o resultado. Você também pode dizer qual é a setterm opção equivalente \e[0m?
SebMa 26/04
Observe que, \e[0mou o equivalente \e[mé para terminais do tipo ANSI, tput sgr0 pode fornecer algo totalmente diferente se o seu terminal não for ANSI. Você não pode ter certeza, mesmo para os terminais ANSI, pois o que você está realmente usando pode ter sido configurado de maneira diferente no banco de dados terminfo.
Hannu
TERM=ansi a=$(tput sgr0); set | grep ^a=eo resultado é a=$'\E[0;10m'. Isso parece diferente de\e[0m
SebMa 27/04
Sim? "Você não pode ter certeza até para os terminais ANSI, pois o que você está realmente usando pode ter sido configurado de maneira diferente no banco de dados terminfo". Como você pode ver acima, essa variante \e(B\e[m- espera diferenças!
Hannu
17

Acredito que você esteja procurando pelo comando do console "reset"

user7963
fonte
2
O problema com a redefinição é que ela apaga todo o conteúdo do console e, às vezes, não é o que você deseja.
Niglesias 04/04
3

Você pode usar esse recurso no .bash_logout remoto mais apropriado:

tput init

Pode ser bom ter isso em todos os .bash_logout como uma boa prática geral (e talvez até em ~ / .profile)

niglesias
fonte
2

Se você colocar as cores desejadas no ~ / .bashrc da conta remota, ela entrará em vigor no login e reverterá para as configurações locais ao sair.

Yitzchak
fonte
Também achei. Mas eles não voltaram quando saí do ssh. Talvez seja porque eu estava usando o setterm no .bashrc (usando o terminal GNOME). Você usa um método diferente para definir o esquema de cores em .bashrc?
dgo.a 31/07
se você estiver usando o GNOME, suponho que você execute o Linux. Eu uso o Ubuntu, mas acho que o processo é bastante semelhante nas distribuições. Você pode fazer backup do arquivo e abri-lo em um editor de texto e editar o conteúdo começando na linha que diz PS1 =. Você pode encontrar informações em novell.com/coolsolutions/tools/17142.html . Ele informa mais do que você sempre quis saber sobre o arquivo .bashrc.
Yitzchak 31/07
1
Oh não. As configurações do terminal não se baseiam no que você está fazendo no terminal. Eles (antromorfizando!) Não se importam se você é local, remoto, trabalhando em suaíli ou algo assim. É uma máquina de estado simples. Desde que você usou um comando para alterá-lo para alguma coisa ... você precisa usar um comando para alterá-lo para outra coisa. A solução .bash_logout é a melhor maneira, a menos que você queira escrever um alias / função para quebrar seus comandos ssh. Blech. Mais fácil, faça suas configurações (sejam elas quais forem) parte da saída do prompt do PS1. Quando você faz login em uma máquina, ele muda, efetua logout, o prompt antigo será restabelecido.
Lornix 27/07/2013