Сохранение цветов приглашения bash при запуске сеанса экрана


11

Когда я вставляю ssh в окно Ubuntu Lucid, приглашение выглядит довольно красиво, с цветами. Все по умолчанию, насколько я знаю. Вот мой внешний экран $ PS1:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@dev\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

Перед подключением с экрана

Но затем, как только я начинаю экран, цвета уходят. Все остальное в порядке, и мой экран может поддерживать цвета (обратите внимание, что .и ..в этом ls -al- синие), но подсказка не. В теории все должно быть точно так же. $ PS1 внутри экрана:

${debian_chroot:+($debian_chroot)}\u@dev:\w\$

после показа в

РЕДАКТИРОВАТЬ: Это просто обычный экран ванили.


Это простой ванильный экран, или у вас установлено byobu? (Хотя это не имеет значения.)
belacqua

2
echo $PS1Распечатывает ли одно и то же на внутреннем и внешнем экранах?
Микель

$ PS1 действительно отличается. Отредактированный вопрос, чтобы включить это.
chmullig

Ответы:


16

Вы можете редактировать следующую строку в вашем .bashrc (это # ​​39 в моем .bashrc):

#force_color_prompt=yes

Изменить на:

force_color_prompt=yes

Это может раздражать, если вы входите откуда-то, где цвет не поддерживается, но я нахожу это крайне маловероятным.


Отлично, это сделало это для меня. Я вижу, что это проблематично, если я вхожу в систему откуда-то без цвета, но это будет довольно редко. Спасибо!
chmullig

Изменение должно быть сделано на сервере, а не на клиенте.
Адам Рычковски,

3

.screenrcФайл является для меня загадкой. Мой гобелен, который я копирую из интернета. Тем не менее, я вижу несколько строк, которые имеют отношение к вашей проблеме:

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Я думаю, что если вы добавите вышеупомянутые строки к своей, вы получите цвет. Вот мое целое .screenrcдля справки:

jake@daedalus:~$ cat .screenrc 
startup_message off # skip splash screen
vbell off # Kill the annoying dog

# Voodoo
hardstatus alwayslastline
hardstatus string '%{= wk}%-Lw%{= KW}%50>%n%f* %t%{= dK}%+Lw%<'

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color 
defbce "on"

2

Ваша PS1настройка должна быть размещена .bashrc, а не .bash_profile.

Если это не проблема, пожалуйста, отредактируйте ваш вопрос, включив в него строку, которую вы установили PS1.

Вы также можете попробовать запустить эти:

echo "$TERM"                                 # will probably print "screen"
tput setaf 2 | cat -vte                      # should print "^[[32m"
echo "$(tput setaf 2)"green"$(tput sgr0)"    # should print "green" in green

2

Screen обычно использует специальный тип терминала, такой как «screen», или, если вы установили его в .screenrc, «screen-256color».

Просто посмотрите в вашем .bashrc заявление об обнаружении цвета и добавьте экран в список.

Например, что-то вроде этого:

case "$TERM" in
    xterm)
        color_prompt=yes
        ;;
    screen)
        color_prompt=yes
        ;;
    *256*) 
        color_prompt=yes
        ;;
esac

Я использую терминалы с 256 цветами, поэтому мне просто нужен оператор 256 case, так как он перехватывает xterm-256color, gnome-256color и screen-256color. Ваш пробег может варьироваться. 🙂


1

Добавьте это к вашему ~ / .screenrc

shell -$SHELL

+1. Это вернуло мне мою красивую подсказку bash на OS X.
funroll

0

Вызов экрана у -T xtermменя работает, так просто:

screen -T xterm

Нет необходимости изменять какие-либо файлы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.