2017-01-23 130 views
0

我正在写一个使用termcaps的程序,我需要知道我正在使用哪种终端。
我知道我可以通过getenv("TERM")获得TERM变量,但是我可以用“$ env -i ./myprog”启动我的程序,并且不会设置TERM。我可以安全地设置TERM环境变量吗?

那么如何确定我必须使用哪种终端类型?
我可以在我的应用程序中安全设置TERM变量为xterm/xterm-256color吗?
它会导致不可移植性问题吗?
有没有一种方法可以安全地执行此类操作(获取termtype)?
我已经红了很多手册(getty - getttab - tty - ttys)和帖子,但是我找不到任何解决方案。

我也很担心,因为如果我启动一个shell(如zshtcsh),我有一些键的问题。

例如启动zsh像这样:
$env -i zsh
将导致用箭头和暗示的termcap(甚至CTR-d)的任何键的麻烦。
相反,bashtcsh将在许多按键上正常运行,但不是全部。

+1

的TERM-变量存在精确地确定终端类型中使用,几乎没有另一种通用的方式来猜测终端类型并设置TERM。你可以让用户选择一个终端,如果它没有设置,或者尝试默认'vt100',因为这是经常使用的。 – Ctx

+0

我想获得比可能的应用程序更便携,所以我想如果我选择设置为默认vt100我可以有一天的可移植性问题? – LotoLo

+0

不,如果使用的终端仿真与vt100不兼容,它将无法正常工作。可移植的方式是:依赖TERM环境变量的设置;如果没有设置,用户必须修复他的环境 – Ctx

回答

0

TERM=vt100设置为默认值(Ctx的建议)是(某种程度上)安全的,因为大多数终端仿真程序都设置为模拟该值。不过,我建议你在这种情况下打印警告。

1

如果你实际使用termcap(而不是一些最小的实现,如busybox),你可能会使用一个系统,提供tset,它可以为用户提供TERM的默认选择,可以修改。

事情是这样的:

eval `tset -s vt100` 

在shell初始化会工作。

实际上tset并不限于termcap-systems,但它就是它开始的地方。

进一步阅读: