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

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

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

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

答案1

如果您想区分交互式 shell 和非交互式 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

答案2

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

答案3

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

就像是:

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

相关内容