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)
这将取决于操作系统。对于 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 的内容,并进行适当的设置。
在我看来,您想检查是否有要连接的 X 服务器。
就像是:
if [ -n "$DISPLAY" ]; then
: X
else
: no X
fi
Run Code Online (Sandbox Code Playgroud)