2017-01-23 144 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,但它就是它開始的地方。

進一步閱讀: