Как получить цветной терминал через ssh?
Когда я подключаюсь через ssh к удаленным хостам, все становится одним шрифтом / цветом. Мне бы хотелось, чтобы у меня были цвета, например, локально, например, зеленый для исполняемого файла и синий для символических ссылок и т. Д. И чтобы при запуске $ git diff на хосте ssh он отображал diff с цветами =)
14 ответов
Поскольку на сервере был xterm, я понял, что что-то не так с .bashrc
И действительно! ls --color=auto
работает только когда вы подключены к TTY. Меняя все просто --color
в .bashrc
на удаленном хосте и теперь все в красивых цветах.
Похоже, цвета уже были установлены в ~/.bashrc
для меня и проблема в том, что ssh не использует файл bashrc. Вы можете использовать bashrc в своей сессии ssh, добавив следующее в ~/.bash_profile
:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Так как цвета работали нормально при непосредственном входе в систему, я просто раскомментировал строку 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 prompt
force_color_prompt=yes
(Ubuntu 18.04 LTS)
Каково содержимое вашей переменной enter XTERM на сервере при подключении к ней?
~ > export | grep -i term
TERM=xterm
В моем случае отсутствующей частью были цветные ls, grep и т. Д., Которые можно добавить, добавив псевдонимы в файл.bashrc:
alias ls='ls --color=auto'
alias grep='grep --color=auto'
и т.п.
В моей ситуации я недавно установил chef-local
и он попросил меня добавить строку в .bash_profile
, Когда я войду, .bashrc
никогда не загружается больше, потому что он видел .bash_profile
,
Что я сделал, чтобы добавить строку в .bash_profile
:
source .bashrc
export 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", и изменить это, но это работает, и я есть другие дела сейчас.
Я пытался изменить ~./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
файл удаленного сервера был выполнен.
Я терял свой цвет при подключении через прокси, потому что TERM=dumb
поэтому я исправил это:
ssh myproxy "ssh pi@localhost -p 5000 -tt 'TERM=xterm bash'"
У меня это сработало: просто откройте файл.bashrc в папке $HOME и раскомментируйте строку
force_color_prompt=yes
У меня возникла эта проблема после создания нового пользователя в Linux (Ubuntu). Параметр
force_color_prompt=yes
не сделал это для меня.
Я забыл указать оболочку, поэтому она пошла по умолчанию
/bin/sh
, перенаправление на
/bin/dash
видимо на моем дистрибутиве. При ручной настройке на
/bin/bash
все работало из коробки.
Так что в моем случае я мог бы использовать
-s
флаг при добавлении пользователя (так
useradd -s /bin/bash ...
указать оболочку. Вместо этого я использовал
chsh -s /bin/bash
установить его после создания.
cd
cat << 'EOF' >color_terminals_over_ssh.sh
#!/bin/bash
#Must pass either enable or disable to script
#./color_terminals_over_ssh.sh enable
DO=$1
if [[ $DO = "enable" ]]
then
sudo sed -i '/force_color_prompt=yes/s/^#//g' /home/*/.bashrc
sudo sed -i '/force_color_prompt=yes/s/^#//g' /root/.bashrc
sudo su
elif [[ $DO = "disable" ]]
then
sudo sed -i '/force_color_prompt=yes/s/^/#/g' /home/*/.bashrc
sudo sed -i '/force_color_prompt=yes/s/^/#/g' /root/.bashrc
sudo su
fi
cat ~/.bashrc | grep force_color_prompt=yes
EOF
chmod +x color_terminals_over_ssh.sh
./color_terminals_over_ssh.sh enable