Определить тип терминала с помощью 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 придется проявить больше творчества.)