Определить тип терминала с помощью tput

Я хотел бы настроить тип терминала, обнаружив его. Например, когда я подключаюсь к коробке Solaris с PuTTY, $TERM переменная установлена ​​в vt100, Я хотел бы договориться об этом, чтобы, когда эмулятор терминала был PuTTY, установить $TERM в xterm,

Я заметил, что на ^ E PuTTY отвечает обратно PuTTY, Но я думаю, что лучший способ - это использовать tput попытаться определить тип эмулятора терминала. Проблема в том, что я не мог найти какую-либо ссылку в terminfo или же tput Руководство, как это сделать.

В противном случае я попробую что-то на основе:

unset remote_term;echo $'\cE';read -rt 1 -n5 remote_term ;echo remote_term=$remote_term

2 ответа

Любая причина, почему вы не можете просто установить параметры подключения в PuTTY для согласования желаемого типа терминала?

В разделе "Настройка PuTTY" выберите "Соединение -> Данные", а затем установите "Строка типа терминала" в разделе "Сведения о терминале" для любого типа терминала, который вы хотите. У меня установлено значение ansi, но вы можете легко изменить его на xterm.

Это более элегантно, чем перехват ответа Ctrl-E, поскольку учитывает намерения пользователя для типа терминала.

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

Почему бы просто не добавить что-то в файл окружения вашей собственной оболочки?

Корн (/ bin / ksh) Shell (~ /.kshrc)

##############################################################################
## TERM control - if we're on the console, fix it up.
TTY=` /usr/bin/tty ` # Really should call /bin/tty in HP-UX in case of S.U.M.
TTY_DEV=${TTY##*/dev/}
if [[ ${TTY_DEV} = "console" ]]; then
## Most serial-line consoles report "/dev/console" when you use 'tty'
## Since most consoles don't set their columns and rows, resulting in weird
##   stuff when we open things like 'vi', we call 'resize' (if it's present)
   if [[ -x /usr/openwin/bin/resize   ]]; then
      printf "Console...\c"
      export PATH=${PATH}:/usr/openwin/bin && \
      /usr/openwin/bin/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   elif [[ -x /usr/bin/X11/resize     ]]; then
      printf "Console..."
      export PATH=${PATH}:/usr/bin/X11 && \
      /usr/bin/X11/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   else
      printf "No resize binary found, check console settings.\n"
   fi
else
   TERM=xterm
fi

Оболочка Bourne Again (/ bin / bash) (~ /.bashrc ~ /.bash_profile)

(Приведенный выше код должен работать без проблем)

Обычная оболочка Bourne (/ bin / sh) (~ /.profile)

(Приведенный выше код, но / bin / sh не выполняет разбиение переменных, поэтому TTY_DEV придется проявить больше творчества.)

Другие вопросы по тегам