Shell

我的腳本如何知道我是在虛擬控制台還是在 xterm 中?

  • September 3, 2012

在虛擬控制台和 xterm 中,我的一些腳本(更改鍵盤映射、添加公鑰)需要採取不同的行動。什麼是真正的程式碼

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi

如果您打算區分互動式外殼和非互動式外殼,請使用test的內置支持來檢測它(不確定 ksh 是否有它,但 coreutils 的二進製文件也支持它):

test -t 0 # will return 0 for interactive shells

如果您的意思是您是在 tty/pty/pts 上還是在其他地方,請解析來自以下位置的輸出tty

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2

這將取決於作業系統。對於 Linux,您可以這樣做:

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
 echo "I'm in a virtual console"
else
 echo "I'm not in a virtual console"
fi

當然,這假設您自己沒有更改TERM環境變數,該變數linux僅在您登錄虛擬控制台時自動設置為(在 Ubuntu 下,它xterm在控制台應用程序中設置為,但這可能因作業系統而異)。檢查您正在使用的各種應用程序中的 TERM 內容,並根據需要進行設置。

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