«Скинути» кольори терміналу після виходу / виходу ssh


21

Коли я сш на віддалений сервер, мені подобається змінювати кольори терміналу. Для цього я використовую settermсвій віддалений файл ~ / .bashrc. Однак, коли я exit, термінальні кольори не скидаються на локальні.

Я вирішив проблему, але не впевнений, чи це найкраще рішення. Це те, що я міг придумати.

На ~ / .bash_logout на віддаленому сервері я ставлю:

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

Просто з цікавості: хтось знає про кращий спосіб? (Я отримав echo -e "\033[0m"рядок від http://edoceo.com/liber/linux-bash-shell )


2
Рекомендую tputзамість цього змінити кольори. Подивіться.
Рам

Які кольори ви встановлюєте та як? Ви маєте на увазі своє запит ( PS1)?
тердон

Відповіді:


37

Краще:
tput sgr0зазвичай це еквівалентecho -en "\e[0m"

Різниця полягає в тому, що використання tput адаптується, якщо тип терміналу відрізняється від ANSI - і він налаштований належним чином.

man 5 terminfo щоб отримати більше кодів.

Там ви знайдете "скидання", так що tput resetмає працювати.


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

(Відбитки TEST повинні мати поміняні кольори фону / переднього плану, тут не можна відображати - лише "емульовано")


Знайшов інший варіант для цього , менш прискіпливого способу:

пакет util-linux (на ubuntu) містить setterm(утиліта оболонки).

введіть setterm --helpі ви знайдете доступні варіанти.


АКТУАЛЬНИЙ вихід tput sgr0

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

... залежить від налаштування вашого терміналу, наприклад

$ set | grep TERM
TERM=xterm-256color

для вищезазначеного.


$ infocmp ansi
    Реконструйовано через infocmp з файлу: / lib / terminfo / a / ansi
ansi | ansi / pc-термін, сумісний із кольором,
    am, mc5i, mir, msgr,
    кольори №8, cols # 80, це # 8, рядки # 24, ncv # 3, пари # 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, блимає = \ E [5m, жирний = \ E [1m, cbt = \ E [Z, ясно = \ 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, чашка = \ 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; 49м,
    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%; м,
    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).

Дізнайтеся більше, почніть тут, можливо, https://en.wikipedia.org/wiki/Посібник
програміста до ncurses - книги Google

Примітка: ncurses надає інтерфейси для termcap, terminfo та, звичайно, прокльонів.


echo -e "\e \033 \x1b " | od -t x1z- що найбільше читається?
Ханну

tput sgr0повертає щось інше від \e[0m, подивіться на це: a=$(tput sgr0); set | grep ^a=і подивіться результат. Чи можете ви також сказати, що таке еквівалентний setterm варіант \e[0m?
SebMa

Зауважте, що \e[0mабо рівне \e[mдля терміналів типу ANSI, tput sgr0 може дати вам щось зовсім інше, якщо ваш термінал не є ANSI. Ви не можете бути впевнені навіть у ANSI-терміналах, оскільки той, який ви фактично використовуєте, може бути налаштований інакше в базі даних terminfo.
Ханну

TERM=ansi a=$(tput sgr0); set | grep ^a=і результат є a=$'\E[0;10m'. Це виглядає інакше, ніж\e[0m
SebMa

Так? "Ви не можете бути впевнені навіть у терміналах ANSI, оскільки той, який ви насправді використовуєте, може бути налаштований інакше в базі даних terminfo." Як ви бачите вище, такий варіант має \e(B\e[m- очікуйте відмінностей!
Ханну

17

Я вважаю, ви шукаєте консольну команду "скинути"


2
Проблема скидання полягає в тому, що вона стирає весь консольний контент, а іноді це не те, що потрібно.
niglesias

3

Ви можете використати це в віддаленому файлі .bash_logout:

tput init

Це може бути добре мати це на кожному .bash_logout як загальну хорошу практику (а можливо, навіть у ~ / .profile)


2

Якщо ви введете потрібні кольори в ~ / .bashrc віддаленого облікового запису, це має набути чинності при вході в систему та повернутися до локальних налаштувань при виході.


Я теж так думав. Але вони не повернулися назад, коли я вийшов з ssh. Можливо, це тому, що я використовував setterm в .bashrc (за допомогою терміналу GNOME). Чи використовуєте ви інший метод встановлення колірної гами в .bashrc?
dgo.a

якщо ви використовуєте GNOME, я припускаю, що ви запускаєте Linux. Я використовую Ubuntu, але я здогадуюсь, процес досить схожий у дистрибутиві. Ви можете створити резервну копію файла, а потім відкрити його в текстовому редакторі та відредагувати вміст, починаючи з рядка, в якому написано PS1 =. Інформацію ви можете знайти на novell.com/coolsolutions/tools/17142.html . Це говорить вам більше, ніж ви коли-небудь хотіли знати про файл .bashrc.
Іцчак

1
Ні, ні. Налаштування терміналу не ґрунтуються на тому, що ви робите в терміналі. Їм (антроморфізуючи!) Байдуже, чи місцевий ви, віддалений, працюєте на суахілі чи що-небудь інше. Це проста державна машина. Оскільки ви використовували команду, щоб змінити її на щось ..., ви повинні використовувати команду, щоб змінити її на щось інше. Рішення .bash_logout - найкращий спосіб, якщо ви не хочете написати псевдонім / функцію, щоб обернути свої команди ssh. Відбілити. Простіше, зробіть свої настройки (якими б вони не були) частиною вашого швидкого виводу PS1. Коли ви ввійдете в машину, вона зміниться, вийдіть із системи, стара підказка відновиться.
lornix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.