Как я делаю окно терминала яблока автоматической цветовой схемой изменения когда я ssh к определенному серверу

typedef typename Tail::inUnion dummy;

Однако я не уверен, что реализация inUnion верна. Если я правильно понимаю, этот класс не должен быть создан, поэтому вкладка «fail» никогда не будет автоматически терпеть неудачу. Возможно, было бы лучше указать, находится ли тип в объединении или нет с простым булевым значением.

template  struct Contains;

template 
struct Contains >
{
    enum { result = Contains::result };
};

template 
struct Contains >
{
    enum { result = true };
};

template 
struct Contains
{
    enum { result = false };
};

PS: Посмотрите на Boost :: Variant

PS2: посмотрите на typelists , особенно в книге Андрея Александреску: Modern C ++ Design

44
задан Lebyrt 7 May 2014 в 19:06
поделиться

4 ответа

Помещенный после сценария в ~/bin/ssh (удостоверяются ~/bin/, смотрел прежде /usr/bin/ в Вашем ПУТИ):

#!/bin/sh

HOSTNAME=`echo $@ | sed s/.*@//`

set_bg () {
  osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

on_exit () {
  set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
  production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
  *) set_bg "{0, 45000, 0, 50000}" ;;
esac

/usr/bin/ssh "$@"

сценарий выше извлекает имя хоста из строки "username@host" (это предполагает, что Вы входите в систему к удаленным хостам с "ssh user@host").

Тогда в зависимости от имени хоста это любой наборы красный фон (для рабочих серверов) или зеленый фон (для всех другой). В результате все Ваши ssh окна будут с цветным фоном.

я предполагаю здесь, что Ваше образование по умолчанию является черным, таким образом, сценарий возвращается цвет фона назад к черному цвету, когда Вы выходите из системы от удаленного сервера (см. "прерывание on_exit").

, обратите внимание однако, что этот сценарий не отслеживает цепочку логинов ssh от одного хоста до другого. В результате фон будет зеленым в случае, если Вы входите в систему к тестированию сервера сначала, затем входите в систему к производству от него.

50
ответ дан Yurii Soldak 26 November 2019 в 21:52
поделиться

Можно установить переменную $PS1 в .bashrc.

red='\e[0;31m'
PS1="$\[${red}\]"

РЕДАКТИРОВАНИЕ: Чтобы сделать это открывает Terminal. Тогда скажите

#touch .bashrc

, можно тогда открыть .bashrc в textEdit или в TextWrangler и добавить предыдущие команды.

5
ответ дан Milhous 26 November 2019 в 21:52
поделиться

Xterm-совместимые терминалы Unix имеют стандартные escape-последовательности для того, чтобы выбрать цвета фона и основные цвета. Я не уверен, совместно использует ли Terminal.app их; это должно.

case $HOSTNAME in
    live1|live2|live3) echo -e '\e]11;1\a' ;;
    testing1|testing2) echo -e '\e]11;2\a' ;;
esac

второе число определяет требуемый цвет. 0=default, 1=red, 2=green, и т.д. Так этот отрывок, когда вставлено общий .bashrc, даст Вам красный фон на живых серверах и зеленый фон при тестировании. Необходимо также добавить что-то вроде этого для сброса фона, когда Вы выходите из системы.

on_exit () {
    echo -e '\e]11;0\a'
}
trap on_exit EXIT
<час>

РЕДАКТИРОВАНИЕ: Google поднялся, путь к выбрал цвет фона с помощью AppleScript. Очевидно, это только работает, когда работается та же машина Terminal.app. Можно работать вокруг этого с парой функций обертки:

set_bg_color () {
    # color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
    osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

sshl () {
    set_bg_color "{45000, 0, 0, 50000}"
    ssh "$@"
    set_bg_color "{0, 0, 0, 50000}"
}

необходимо было бы не забыть выполнять sshl вместо ssh при соединении с живым сервером. Другая опция состоит в том, чтобы записать функцию обертки для ssh, который сканирует его аргументы в пользу известных живых имен узлов и устанавливает фон соответственно.

2
ответ дан skymt 26 November 2019 в 21:52
поделиться

Почему не просто изменение приглашения оболочки каждый раз, когда Вы зарегистрированы на пути SSH? Существуют обычно определенные переменные оболочки: SSH_CLIENT, SSH_CONNECTION, SSH_TTY

1
ответ дан unexist 26 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: