我的一些脚本(更改键盘映射、添加公钥)在虚拟控制台和 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