我的脚本如何知道我何时处于虚拟控制台与xterm中?


11

在虚拟控制台和xterm中,我的一些脚本(更改键盘映射,添加公共密钥)需要采取不同的操作。真正的代码是什么

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

Answers:


6

在我看来,您想要检查是否有X服务器要连接。

就像是:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi

1
我从来没有在stackexchange上找到三个完美的答案。
John Baber-Lucero

9

如果您打算区分交互式和非交互式shell,请使用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

我从来没有在stackexchange上找到三个完美的答案。
John Baber-Lucero

7

这将取决于操作系统。对于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的内容,并进行适当设置。


我从来没有在stackexchange上找到三个完美的答案。
John Baber-Lucero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.