我可以安全地设置 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(例如 zsh
或 tcsh
),我会遇到某些键的问题。
例如像这样启动 zsh
:
$env -i zsh
会导致箭头和任何暗示 termcaps(甚至 Ctr-d)的键出现问题。
相反 bash
和 tcsh
将在许多键上正常运行,但不是全部。
将 TERM=vt100
设置为默认值(Ctx 的建议)(在某种程度上)是安全的,因为大多数终端仿真器都设置为模拟它。不过,我建议您在这种情况下打印警告。
如果您实际使用的是 termcap(而不是像 busybox 这样的最小实现),您可能使用的是提供 tset
的系统,它可以为用户提供 [=12] 的默认选择=] 可以修改。
像这样:
eval `tset -s vt100`
在 shell 中初始化会起作用。
实际上 tset
并不局限于 termcap-systems,但这就是它的起点。
进一步阅读:
- tset, reset -- terminal initialization(FreeBSD)
- tset, reset - terminal initialization (ncurses)
- tset, reset - terminal initialization (NetBSD)
我正在编写一个使用 termcaps 的程序,我需要知道我使用的是哪种终端。
我知道我可以通过 getenv("TERM")
获取 TERM
变量,但我可以使用“$ env -i ./myprog
”启动我的程序,并且不会设置 TERM。
那么我如何确定我必须使用哪种终端类型?
我可以在我的应用程序中安全地将 TERM
变量设置为 xterm/xterm-256color
吗?
它会导致不可移植性问题吗?
有没有一种方法可以安全地执行此操作(获取术语类型)?
我已经阅读了许多手册 (getty - getttab - tty - ttys) 和帖子,但我找不到任何解决方案。
我也很担心,因为如果我启动 shell(例如 zsh
或 tcsh
),我会遇到某些键的问题。
例如像这样启动 zsh
:
$env -i zsh
会导致箭头和任何暗示 termcaps(甚至 Ctr-d)的键出现问题。
相反 bash
和 tcsh
将在许多键上正常运行,但不是全部。
将 TERM=vt100
设置为默认值(Ctx 的建议)(在某种程度上)是安全的,因为大多数终端仿真器都设置为模拟它。不过,我建议您在这种情况下打印警告。
如果您实际使用的是 termcap(而不是像 busybox 这样的最小实现),您可能使用的是提供 tset
的系统,它可以为用户提供 [=12] 的默认选择=] 可以修改。
像这样:
eval `tset -s vt100`
在 shell 中初始化会起作用。
实际上 tset
并不局限于 termcap-systems,但这就是它的起点。
进一步阅读:
- tset, reset -- terminal initialization(FreeBSD)
- tset, reset - terminal initialization (ncurses)
- tset, reset - terminal initialization (NetBSD)