Когда я подключаюсь по 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.