C 我可以安全地设置术语环境变量吗?

C 我可以安全地设置术语环境变量吗?,c,termios,termcap,C,Termios,Termcap,我正在编写一个使用termcaps的程序,我需要知道我使用的是哪种终端。 我知道我可以通过getenv(“TERM”)获取TERM变量,但我可以使用“$env-I./myprog”启动我的程序,并且不会设置TERM 那么,如何确定必须使用哪种终端类型呢? 我可以在我的应用程序中将TERM变量安全地设置为xterm/xterm-256color 它会导致不可移植性问题吗? 是否有安全地执行此操作(获取termtype)的方法? 我有很多手册(getty-gettab-tty-ttys)和帖子,但我

我正在编写一个使用termcaps的程序,我需要知道我使用的是哪种终端。
我知道我可以通过
getenv(“TERM”)
获取
TERM
变量,但我可以使用“
$env-I./myprog
”启动我的程序,并且不会设置TERM

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

我也很担心,因为如果我启动shell(比如
zsh
tcsh
),我的一些键会出现问题

例如,像这样启动
zsh

$env-i zsh

将导致箭头和任何暗示termcaps(甚至Ctr-d)的键出现故障。

相反,
bash
tcsh
将在许多按键上正常工作,但并非所有按键都正常工作。

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

如果您实际使用的是termcap(而不是busybox之类的最小实现),那么您可能使用的系统提供了
tset
,可以为用户提供可修改的
术语的默认选择

大概是这样的:

eval `tset -s vt100`
在shell中,初始化将起作用

实际上,
tset
并不局限于termcap系统,但它就是从这里开始的

进一步阅读:

  • (FreeBSD)
  • (课程)
  • (NetBSD)

术语变量的存在正是为了确定要使用的终端类型,几乎没有其他通用方法来猜测终端类型和设置术语。你可以让用户选择一个未设置的终端,或者尝试默认设置为vt100,因为这是经常使用的。我试图获得一个比可能的应用程序更便携的应用程序,所以我想如果我选择设置为默认vt100,我可能有一天会出现便携性问题?不,如果所使用的终端仿真与vt100不兼容,它将无法正常工作。可移植的方法是:依赖于术语环境变量的设置;如果未设置,用户必须修复其环境不要破坏
术语
变量。如果您无法抗拒使用
env-i
,请这样使用:
env-i TERM=$TERM bash