«Сбросить» цвета терминала после выхода из 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 )

dgo.a
источник
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   
$   

(Отпечатки ТЕСТА должны были поменять местами цвета фона / переднего плана, здесь не могут быть показаны - только "эмулированные")


Нашел другой вариант для этого , менее вызывающий способ:

в пакете 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-term совместимый с цветом,
    am, mc5i, mir, msgr,
    цвета № 8, столбцы № 80, это № 8, строки № 24, NCV № 3, пары № 64,
    ACSC = + \ 020 \, \ 021- \ 030. ^ Y0 \ 333` \ 004A \ 261f \ 370г \ 361h \ 260j \ 331K \ 277l \ 332m \ 300N \ 305o ~ р \ 304q \ 304r \ 304s_t \ 303u \ 264V \ 301W \ 302x \ 263y \ 363z \ 362 {\ 343 | \ 330} \ 234 ~ \ 376,
    бел = ^ G, мигает = \ E [5м, жирный = \ E [1м, 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, 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% дм, setaf = \ E [3% p1% дм,
    SGR = \ Е [0;? 10%% р1% т; 7%;?%% р2% т; 4%;?%% р3% т; 7%;?%% р4% т; 5%;%? % р6% т; 1%;?%%% P7 т; 8%;?%%% P9 т; 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/Terminfo
Руководство программиста по ncurses - google books

примечание: ncurses предоставляет интерфейсы для termcap, terminfo и, конечно, curses.

Ханну
источник
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

Я полагаю, вы ищете консольную команду "сбросить"

user7963
источник
2
Проблема с возвратом в том, что он стирает все содержимое консоли, а иногда это не то, что вы хотите.
niglesias
3

Вы можете найти использование этого в удаленном .bash_logout более подходящим:

tput init

Это может быть полезно иметь в каждом .bash_logout в качестве общей хорошей практики (и, возможно, даже в ~ / .profile)

niglesias
источник
2

Если вы добавите нужные цвета в ~ / .bashrc удаленной учетной записи, это должно вступить в силу при входе в систему и вернуться к вашим локальным настройкам при выходе.

Ицхака
источник
Я тоже так думал. Но они не вернулись назад, когда я вышел из SSH. Может быть, это потому, что я использовал setterm в .bashrc (используя терминал GNOME). Используете ли вы другой метод установки цветовой схемы в .bashrc?
dgo.a
если вы используете GNOME, я предполагаю, что вы используете Linux. Я использую Ubuntu, но я предполагаю, что процесс довольно похож на разных дистрибутивах. Вы можете сделать резервную копию файла, затем открыть его в текстовом редакторе и отредактировать его содержимое, начиная со строки с надписью PS1 =. Вы можете найти информацию на novell.com/coolsolutions/tools/17142.html . Он говорит вам больше, чем вы когда-либо хотели знать о файле .bashrc.
Ицхак
1
Нет Настройки терминала не основаны на том, что вы делаете в терминале. Им (антроморфизирующим!) Все равно, где вы, вдали, работаете на суахили или чем-то еще. Это простой конечный автомат. Поскольку вы использовали команду, чтобы изменить ее на что-то ... вы должны использовать команду, чтобы изменить ее на что-то другое. Решение .bash_logout - лучший способ, если только вы не хотите написать псевдоним / функцию для переноса ваших команд ssh. Blech. Проще сделать ваши настройки (какими бы они ни были) частью вашего приглашения PS1. Когда вы войдете в систему, она изменится, выйдет из системы, старая подсказка будет восстановлена.
lornix