Как получить цветной терминал по ssh?

Когда я подключаюсь по ssh к удаленным хостам, все имеет только один шрифт / цвет. Я хотел бы иметь цвета, как я делаю локально, например, зеленый для исполняемого файла и синий для символических ссылок и т.д. И так, что когда я запускаю $ git diff на ssh-хосте, он показывает мне разницу с цветами =)

Поскольку на сервере был xterm, я решил, что что-то не так с .bashrc

И действительно! ls --color=auto работает только тогда, когда вы подключены к TTY. Меняя все на простое --color в .bashrc на удаленном хосте, и теперь все в красивых тонах.

Это сработало для меня:

ssh -t my_host my_command

-t это был ключ. Объясненный:

-t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a        remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t        options force tty allocation, even if ssh has no local tty.

Похоже, цвета уже были установлены в ~/.bashrc для меня проблема заключается в том, что ssh не использует файл bashrc. Вы можете использовать bashrc в своем сеансе ssh, добавив следующее в ~/.bash_profile:

if [ -f ~/.bashrc ]; then      . ~/.bashrcfi

Поскольку цвета работали нормально при непосредственном входе в систему, я просто откомментировал строку force_color_prompt=yes в файле ~/.bashrc, это тоже дало мне цвета по ssh:

# uncomment for a colored prompt, if the terminal has the capability; turned# off by default to not distract the user: the focus in a terminal window# should be on the output of commands, not on the promptforce_color_prompt=yes

(Ubuntu 18.04 LTS)

Каково содержимое вашей переменной XTERM env на сервере, когда вы подключаетесь к ней?

~ > export | grep -i termTERM=xterm

В моем случае недостающая часть состояла в том, чтобы иметь цветные ls, grep и т.д. который можно добавить, добавив псевдонимы в файл .bashrc:

alias ls='ls --color=auto'alias grep='grep --color=auto'

и т.д.

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

Потом я заметил, что ~/.bashrc удаленного сервера даже не выполняется, если я подключаюсь к нему по ssh. Поэтому я сделал ~/.bashrc удаленного сервера для выполнения с помощью надевание if [ -f ~/.bashrc ]; then . ~/.bashrc fi на удаленном сервере ~/.bash_profile. (на основе https://stackoverflow.com/questions/820517/bashrc-at-ssh-login).

Таким образом, это решение не требовало изменения каких-либо ~/bashrc файлы напрямую, но это потребовало изменения ~/bash_profile файл удаленного сервера, чтобы ~/bashrc файл удаленного сервера был выполнен.

В моей ситуации я недавно установил chef-local и он попросил меня добавить строку в .bash_profile. Когда я войду в систему, .bashrc больше никогда не загружается, потому что он видел .bash_profile.

Что я сделал, так это добавил строку в .bash_profile:

source .bashrcexport PATH="/opt/chefdk/embedded/bin:$PATH"

Я вышел из системы, снова вошел в систему и сразу же получил свой цветной терминал.

Выше есть комментарий от "Mike E", в котором содержится ответ для меня, но его не только трудно прочитать, но и довольно трудно понять, что он имеет в виду, если вы не используете .bashrc много - и я этого не делаю.

Немного повозившись, я получил желаемые результаты, изменив следующие строки в ~/.bashrc на компьютере, в который я входил с помощью ssh:

# set a fancy prompt (non-color, unless we know we "want" color)case "$TERM" in    xterm-color|*-256color) color_prompt=yes;;esac

к:

# set a fancy prompt (non-color, unless we know we "want" color)case "$TERM" in    xterm-color|*-256color) color_prompt=yes;;    xterm) color_prompt=yes;;esac

Я думаю, что мог бы просто добавить "| xterm" после "color" в первой строке или покопаться и выяснить, почему ssh использовал "xterm" вместо "xterm-color", и изменить это, но это работает, и сейчас у меня есть другие дела.

Я терял свой цвет при подключении через прокси-сервер, потому что TERM=dumb так что я все исправил:

ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"

Это сервер Ubuntu, к которому вы подключаетесь?

@stefano-palazzo: в Debian.