Как я могу автоматически изменить цвета терминала, когда я ssh сервер?

14

Я часто захожу на разные серверы из окна моего терминала OS X.

Я хотел бы назначить цветовую схему для разных хостов, чтобы мои окна терминала были проще различать. Можно ли это сделать автоматически?


источник

Ответы:

11

Вот полное решение. В ~ / .server_colors храните список IP-адресов и / или доменов ваших серверов и цветов, которые вы хотите для них:

192.168.122.102, Красные Пески
192.168.122.103, океан
www.foo.com, Grass
foo.com, Grass

Затем добавьте эту строку в ~ / .profile, чтобы перехватить команду ssh:

псевдоним ssh = "~ / bin / safe_ssh $ 1"

Затем сравните все, что идет после @ в вашей цели ssh, с вашим списком. Если есть совпадение, запустите AppleScript, чтобы изменить цвет экрана на соответствующий. Вот ~ / bin / safe_ssh:

#! / Bin / Баш
ip = `echo $ 1 | cut -d "@" -f2`
match = `cat ~ / .server_colors | grep $ ip | wc -l`
если [$ match -gt 0]
тогда
    color = `cat ~ / .server_colors | grep $ ip | cut -f2 -d "," `
    osascript ~ / bin / change_terminal_color.scpt "$ color" 2> / dev / null
фи
/ usr / bin / ssh $ 1

И наконец, вот ~ / bin / change_terminal_color.scpt

на бегу argv
    указать приложению «Терминал» установить текущие настройки выбранной вкладки окна 1 (первые настройки, имя которых (пункт 1 из argv))
конец бега

Я взял большую часть этого кода из этого поста в блоге .

muirbot
источник
1
Очень хорошо. В сценарии safe_ssh $ 1 должен быть $ @, чтобы разрешить передачу дополнительных параметров в SSH. Возможно также вызов после ssh, чтобы вернуть терминал обратно по умолчанию. Одно последнее редактирование сделало бы это почти идеальным: поддержка команд SSH, не содержащих «@».
nOw2
2

Да.

Либо вы используете, например, «экран» и настроить его: http://www.slac.stanford.edu/comp/unix/package/epics/extensions/iocConsole/screen.1.html

Или вам удастся сделать это на вашем SSH Client, если это возможно.

Вы также можете попробовать это: http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/

Tie-истребитель
источник
2

Решение @muirbot работает очень хорошо для меня. Я сделал несколько небольших улучшений в этом. Я добавлю его ниже своего поста, как только у меня будет достаточно репутации.

Заменить линию

ф =echo $1 | cut -d"@" -f2
с
ф =echo $@ | grep -Eio [[:alnum:]_.-]+@[[:alnum:]_.-]+ | cut -d@ -f2

Это изменение позволяет задавать дополнительные аргументы для вашей команды ssh, например "ssh -p 1111 userName @ host"

Регулярное выражение допускает простые адреса ipv4 и доменные имена.

Для дальнейшей поддержки нескольких аргументов измените последнюю строку на

/ usr / bin / ssh $ @

Винсент Никкелен
источник
0

Я просто искал то же самое и нашел эту статью:

http://akrabat.com/php/osx-terminal-colours/

Он использует php-скрипт для изменения цвета терминала на applecript. Вы можете настроить сопоставления разных цветов для каждого сервера. Прекрасно работает для меня, хотя чувствую желание переписать php-материал в ruby ​​:)

Ф.К.

effkay
источник
0

Я использую скрипт, который запускает SSH в окнах xterm с разными цветами bg / fg. Он выбирает цвета на основе хэша имени хоста из цветовой шкалы, поэтому настройка не требуется.

Сценарий написан на Ruby: https://github.com/mickeyil/ssx

miluz
источник
0

Если вы используете iTerm2, создайте файл с именем ~/bin/ssh-host-color.shпо адресу https://gist.github.com/jbochi/31f118b8ae2882a2c90fa46c46509b57 :

set_term_bgcolor(){
  local R=$1
  local G=$2
  local B=$3
  /usr/bin/osascript <<EOF
tell application "iTerm"
  tell the current window
    tell the current session
      set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
    end tell
  end tell
end tell
EOF
}

if [[ "$@" =~ "production.example.com" ]]; then
  set_term_bgcolor 40 0 0
elif [[ "$@" =~ "qa.example.com" ]]; then
  set_term_bgcolor 0 40 0
fi

trap "set_term_bgcolor 0 0 0" EXIT

ssh $@

И добавьте следующую строку в ваш ~/.aliases.shфайл:

alias ssh="~/bin/ssh-host-color.sh $@"
jbochi
источник