我可以安全地设置 TERM 环境变量吗?

May I set TERM environment variable safely?

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

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

我也很担心,因为如果我启动 shell(例如 zshtcsh),我会遇到某些键的问题。

例如像这样启动 zsh
$env -i zsh
会导致箭头和任何暗示 termcaps(甚至 Ctr-d)的键出现问题。
相反 bashtcsh 将在许多键上正常运行,但不是全部。

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

如果您实际使用的是 termcap(而不是像 busybox 这样的最小实现),您可能使用的是提供 tset 的系统,它可以为用户提供 [=12] 的默认选择=] 可以修改。

像这样:

eval `tset -s vt100`

在 shell 中初始化会起作用。

实际上 tset 并不局限于 termcap-systems,但这就是它的起点。

进一步阅读: