„Resetuj” kolory terminala po wyjściu / wylogowaniu ssh

21

Kiedy ssh łączy się ze zdalnym serwerem, podoba mi się zmiana kolorów terminala. Korzystam settermz mojego zdalnego pliku ~ / .bashrc, aby to zrobić. Jednak gdy I exit, kolory terminala nie są resetowane do kolorów lokalnych.

Rozwiązałem problem, ale nie jestem pewien, czy jest to najlepsze rozwiązanie. Tak mogłem wymyślić.

Na ~ / .bash_logout na zdalnym serwerze umieszczam:

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

Właśnie z ciekawości: czy ktoś zna lepszy sposób? (Mam echo -e "\033[0m"linię z http://edoceo.com/liber/linux-bash-shell )

dgo.a
źródło
2
tputZamiast tego zalecam zmianę koloru. Sprawdź to.
Ram
Jakie kolory ustawiasz i jak? Czy masz na myśli Twój monit ( PS1)?
terdon

Odpowiedzi:

37

Lepiej:
tput sgr0zwykle jest odpowiednikiemecho -en "\e[0m"

Różnica polega na tym, że użycie tput dostosuje się, jeśli typ terminala jest inny niż ANSI - i został poprawnie skonfigurowany.

man 5 terminfo więcej kodów do użycia.

Tam znajdziesz „reset”, więc tput resetpowinno działać.


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

(Wydruki TEST powinny mieć zamienione kolory tła / pierwszego planu, nie można ich tutaj pokazywać - tylko „emulowane”)


Znalazłem inną opcję tego , mniej naukowy sposób:

pakiet util-linux (na ubuntu) zawiera setterm(narzędzie powłoki).

wpisz, setterm --helpa znajdziesz dostępne opcje.


RZECZYWISTE wyjście tput sgr0

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

... zależy od konfiguracji twojego terminala, np

$ set | grep TERM
TERM=xterm-256color

za powyższe.


$ infocmp ansi
    Zrekonstruowany przez infocmp z pliku: / lib / terminfo / a / ansi
ansi | ansi / pc-term zgodny z kolorem,
    jestem, mc5i, mir, msgr,
    kolory # 8, cols # 80, it # 8, linie # 24, ncv # 3, pary # 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, mrugnięcie = \ E [5m, pogrubienie = \ E [1m, cbt = \ E [Z, wyczyść = \ 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%;% a% p7% t; 8%;% a% 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).

Dowiedz się więcej, zacznij tutaj może https://en.wikipedia.org/wiki/Terminfo
Przewodnik programisty po ncurses - Google Books

Uwaga: ncurses zapewnia interfejsy dla termcap, terminfo i oczywiście przekleństw.

Hannu
źródło
echo -e "\e \033 \x1b " | od -t x1z- który jest najbardziej czytelny?
Hannu
tput sgr0zwraca coś innego \e[0m, spójrz na to: a=$(tput sgr0); set | grep ^a=i zobacz wynik. Czy możesz również powiedzieć, jaka jest odpowiednia setterm opcja \e[0m?
SebMa
Zauważ, że \e[0mlub to samo \e[mdotyczy terminali typu ANSI, tput sgr0 może dać ci coś zupełnie innego, jeśli twój terminal nie jest ANSI. Nie możesz być pewien, nawet w przypadku terminali ANSI, ponieważ ten, którego faktycznie używasz, mógł zostać skonfigurowany inaczej w bazie danych terminfo.
Hannu,
TERM=ansi a=$(tput sgr0); set | grep ^a=i wynik jest a=$'\E[0;10m'. Wygląda to inaczej niż\e[0m
SebMa
Tak? „Nie możesz być pewien, nawet w przypadku terminali ANSI, ponieważ ten, którego faktycznie używasz, mógł zostać skonfigurowany inaczej w bazie danych terminfo”. Jak widać powyżej, ten wariant ma \e(B\e[m- spodziewaj się różnic!
Hannu,
17

Wydaje mi się, że szukasz polecenia „resetu” konsoli

użytkownik7963
źródło
2
Problem z resetowaniem polega na tym, że usuwa całą zawartość konsoli, a czasem nie jest to, czego chcesz.
niglesias,
3

Może się okazać, że użycie tego w zdalnym .bash_logout jest bardziej odpowiednie:

tput init

Dobrze byłoby mieć to na każdym .bash_logout jako ogólną dobrą praktykę (a być może nawet na ~ / .profile)

Niglesias
źródło
2

Jeśli umieścisz żądane kolory w ~ / .bashrc konta zdalnego, powinno to zadziałać przy logowaniu i powrócić do ustawień lokalnych po wyjściu.

Icchak
źródło
Też tak myślałem. Ale nie wycofały się, kiedy opuściłem ssh. Może to dlatego, że korzystałem z setterm w .bashrc (używając terminala GNOME). Czy używasz innej metody ustawiania schematu kolorów w .bashrc?
dgo.a
jeśli używasz GNOME, zakładam, że używasz Linuksa. Używam Ubuntu, ale zgaduję, że proces jest dość podobny w różnych dystrybucjach. Możesz wykonać kopię zapasową pliku, a następnie otworzyć go w edytorze tekstu i edytować zawartość, zaczynając od wiersza z napisem PS1 =. Informacje można znaleźć na stronie novell.com/coolsolutions/tools/17142.html . Mówi ci więcej niż kiedykolwiek chciałeś wiedzieć o pliku .bashrc.
Yitzchak
1
O nie. Ustawienia terminala nie są oparte na tym, co robisz w terminalu. Oni (antromorfizujący!) Nie dbają o to, czy jesteś lokalny, odległy, pracujesz w suahili czy coś takiego. To prosta maszyna stanu. Ponieważ użyłeś polecenia, aby zmienić to na coś ... musisz użyć polecenia, aby zmienić to na coś innego. Rozwiązanie .bash_logout jest najlepszym sposobem, chyba że chcesz napisać alias / funkcję do zawinięcia poleceń ssh. Blech. Łatwiej, spraw, by twoje ustawienia (cokolwiek by to były) były częścią monitu PS1. Gdy zalogujesz się na maszynie, zmieni się, wylogujesz, stare monity zostaną przywrócone.
lornix