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
Помещенный после сценария в ~/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 от одного хоста до другого. В результате фон будет зеленым в случае, если Вы входите в систему к тестированию сервера сначала, затем входите в систему к производству от него.
Можно установить переменную $PS1 в .bashrc.
red='\e[0;31m'
PS1="$\[${red}\]"
РЕДАКТИРОВАНИЕ: Чтобы сделать это открывает Terminal. Тогда скажите
#touch .bashrc
, можно тогда открыть .bashrc в textEdit или в TextWrangler и добавить предыдущие команды.
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, который сканирует его аргументы в пользу известных живых имен узлов и устанавливает фон соответственно.
Почему не просто изменение приглашения оболочки каждый раз, когда Вы зарегистрированы на пути SSH? Существуют обычно определенные переменные оболочки: SSH_CLIENT, SSH_CONNECTION, SSH_TTY