Назад | Перейти на главную страницу

Определить тип терминала с помощью 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

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

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

Korn (/ bin / ksh) Оболочка (~ / .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)

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

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

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

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

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

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