Environment-Variables

螢幕和小貓 $TERM 應該是什麼?

  • November 30, 2018

為什麼要tmux舉報

$TERM=screen-256color

通常會kitty報告

$TERM=xterm-kitty

如果我在tmux裡面跑,我應該使用哪個kitty?顯然kitty提供了高級功能,並且它報告是有道理的xterm-kitty。為什麼螢幕報告說screen-256有程序需要注意它們正在螢幕中執行?在 kitty 中呼叫 screen running 會不會有問題xterm-kitty

如果我在 kitty 中執行 tmux,我應該使用哪個?

執行時tmux,您必須使用TERM=screen,TERM=tmux或其中一種派生詞,例如TERM=screen-256colorTERM=tmux-256color

男人tmux(1)說…

對於在 tmux 中執行的所有程序,TERM 環境變數必須設置為“screen”。新視窗將自動將“TERM=screen”添加到它們的環境中,但必須注意不要在 shell 啟動文件中重置它。

..並進一步澄清…

為在此會話中創建的新視窗設置預設終端 - TERM 環境變數的預設值。要使 tmux 正常工作,必須將其設置為 ‘screen’ 或其派生詞。

…他們還強調必須

tmux wiki繼續提供額外的說明和答案……

tmux 裡面的 TERM 必須是“screen”、“tmux”或類似的(例如“tmux-256color”)。不要費心報告不存在的問題!

是否有需要注意它們正在螢幕中執行的程序?

是的。許多程序,例如,在執行時(或)tput將無法正確顯示,除非它們使用正確的值。screen``tmux``TERM

什麼是 TERM,它有什麼作用?

環境變數 TERM 告訴應用程序從 terminfo(5) 數據庫中讀取的終端描述名稱。每個描述都由許多命名的能力組成,這些能力告訴應用程序發送什麼來控制終端。例如,“cup”功能包含用於向上移動游標的轉義序列。

重要的是 TERM 指向應用程序正在執行的終端的正確描述 - 如果沒有,應用程序可能會出現異常。

infocmp(1) 命令顯示終端描述的內容,tic(1) 命令從文件建構和安裝描述(通常兩者都需要 -x 標誌)。

在kitty xterm-kitty中呼叫screen執行會不會有問題?

不一定,只要TERM執行螢幕中的值設置正確(即TERM=screen-256color)並且有有效的 terminfo 字元串用於它screentmux知道如何處理。

其他衍生產品(在我的機器上)是:

/usr/share/terminfo/s/screen
/usr/share/terminfo/s/screen-16color
/usr/share/terminfo/s/screen-256color
/usr/share/terminfo/s/screen.Eterm
/usr/share/terminfo/s/screen.gnome
/usr/share/terminfo/s/screen.konsole
/usr/share/terminfo/s/screen.linux
/usr/share/terminfo/s/screen.mlterm
/usr/share/terminfo/s/screen.mrxvt
/usr/share/terminfo/s/screen.rxvt
/usr/share/terminfo/s/screen.teraterm
/usr/share/terminfo/s/screen.vte
/usr/share/terminfo/s/screen.xterm-r6
/usr/share/terminfo/s/screen.xterm-new
/usr/share/terminfo/s/screen.xterm-xfree86

一旦TERM設置,您可以執行infocmp. 這將報告該值是否存在有效的 terminfo。其他測試可以驗證基本的 terminfo 功能,例如:

for terminfos in $(find /usr/share/terminfo/s -type f -name 'screen*' -printf '%f\n' -o -name 'tmux*' -printf '%f\n'); do export TERM=$terminfos; printf "%s: %sthis is foreground color 10 %sitalics%s and now all attributes are turned off\n" "$terminfos" "$(tput setaf 10)" "$(tput sitm)" "$(tput sgr0)"; done

引用自:https://unix.stackexchange.com/questions/484775