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

Joh*_*ero 11 command-line shell terminal xterm

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

#!/bin/ksh
if [[ in_a_virtual_console ]]; then
...
else
...
fi
Run Code Online (Sandbox Code Playgroud)

lyn*_*ynx 10

如果您想区分交互式 shell 和非交互式 shell,请使用test的内置支持来检测它(不确定 ksh 是否有它,但 coreutils 的二进制文件也支持它):

test -t 0 # will return 0 for interactive shells
Run Code Online (Sandbox Code Playgroud)

如果你真的是说你是在 tty/pty/pts 还是其他东西上,请解析以下输出tty

$ tty # konsole
/dev/pts/4
$ tty # virtual terminal
/dev/tty2
Run Code Online (Sandbox Code Playgroud)


tep*_*pic 8

这将取决于操作系统。对于 Linux,你可以这样做:

#!/bin/ksh

if [ "$TERM" == "linux" ]; then
  echo "I'm in a virtual console"
else
  echo "I'm not in a virtual console"
fi
Run Code Online (Sandbox Code Playgroud)

当然,这假设您没有TERM自己更改环境变量,linux只有在您登录虚拟控制台时才会自动设置为(在 Ubuntu 下,它xterm在控制台应用程序中设置为,但这可能因操作系统而异)。检查您正在使用的各种应用程序中 TERM 的内容,并进行适当的设置。


Sté*_*las 6

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

就像是:

if [ -n "$DISPLAY" ]; then
  : X
else
  : no X
fi
Run Code Online (Sandbox Code Playgroud)