我想通过检测终端类型来配置它。例如,当我使用 PuTTY 连接到 Solaris 框时,变量$TERM
设置为vt100
。我想协商这一点,以便当终端仿真器是 PuTTY 时,设置$TERM
为xterm
。
我注意到^EPuTTY 用 来回复PuTTY
。但我认为最好的方法是使用 来尝试检测终端仿真器类型。问题是我在或手册tput
中找不到有关如何执行此操作的任何参考。terminfo
tput
否则,我将尝试基于以下内容的方法:
unset remote_term;echo $'\cE';read -rt 1 -n5 remote_term ;echo remote_term=$remote_term
答案1
为什么不能仅在 PuTTY 中设置连接选项来协商所需的终端类型?
在 PuTTY 配置下,单击连接 -> 数据,然后将终端详细信息部分中的“终端类型字符串”设置为您想要的任何终端类型。我的设置为 ansi,但您可以轻松将其更改为 xterm。
这比拦截 Ctrl-E 应答更优雅,因为它尊重用户对终端类型的意图。
答案2
也许这太简单了,但如果你担心你的用户环境(假设每个人都有自己的帐户,并且没有一群人使用相同的用户名+密码组合的疯狂帐户共享)...
为什么不直接在您自己的 shell 的环境文件中添加一些内容呢?
Korn(/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) Shell (~/.bashrc ~/.bash_profile)
(以上代码应该可以正常运行)
常规 Bourne(/bin/sh)Shell(~/.profile)
(上面的代码,但是 /bin/sh 没有进行变量分割,因此 TTY_DEV 必须更有创造力。)