【发布时间】:2017-01-23 13:15:10
【问题描述】:
我正在编写一个使用 termcaps 的程序,我需要知道我使用的是哪种终端。
我知道我可以通过getenv("TERM") 获得TERM 变量,但我可以使用“$ env -i ./myprog”启动我的程序,并且不会设置 TERM。
那么如何确定我必须使用哪种终端类型?
我可以在我的应用程序中安全地将TERM 变量设置为xterm/xterm-256color 吗?
它会导致不可移植性问题吗?
有没有一种方法可以安全地执行此操作(获取 termtype)?
我有很多手册(getty - getttab - tty - ttys)和帖子,但我找不到任何解决方案。
我也很担心,因为如果我启动一个 shell(如 zsh 或 tcsh),我的某些键会出现问题。
例如像这样启动zsh:$env -i zsh
会导致箭头和任何暗示 termcaps 的键(甚至 Ctr-d)出现问题。
相反,bash 和 tcsh 将在许多键上正常运行,但不是全部。
【问题讨论】:
-
TERM 变量的存在正是为了确定要使用的终端类型,几乎没有其他通用的方法来猜测终端类型并设置 TERM。如果终端未设置,您可以让用户选择终端或尝试默认为
vt100,因为这经常使用。 -
我正在尝试获得一个比可能的应用程序更便携的应用程序,所以我想如果我选择设置为默认 vt100,我有一天会遇到可移植性问题?
-
不,如果使用的终端仿真与 vt100 不兼容,它将无法按预期工作。可移植的方式是:依赖TERM环境变量的设置;如果没有设置,用户必须修复他的环境
-
不要破坏你的
TERM变量。如果您无法抗拒使用env -i,请这样使用:env -i TERM=$TERM bash