如何区分终端窗口(GUI)和控制台(CTRL+ALT+F3)?

如何区分终端窗口(GUI)和控制台(CTRL+ALT+F3)?

我使用彩色的 bash 提示符,如下所示:

blue=$(tput setaf 4)
reset=$(tput sgr0)
bold=$(tput bold)
export PS1='($?) \[$bold$blue\]\u@\h:\w\[$reset\]$(__git_ps1)> '

我通常在终端窗口(gnome-terminal)中工作,但有时在全屏控制台(CTRL++ )中工作。ALTF3

我的彩色提示在 GUI 终端中很好,但在全屏下很难阅读,因为颜色看起来不同。所以cyan=$(tput setaf 6)当在控制台窗口中时,我想使用不同的颜色(例如)。为了使它工作,我需要弄清楚哪个模式我目前已进入并进行$PS1相应设置。

我尝试了这个tty命令。它给出

/dev/pts/0  # GUI terminal
/dev/tty3   # console 

我还尝试检查 的值$TERM。结果显示

xterm-256color  # GUI terminal
linux           # console

这两种方法对我来说都适用,但我的问题是:这是可靠区分控制台和终端的正确方法吗?或者还有更好的方法吗?如果这很重要的话,我在 17.10.1。

答案1

有多种方法可以确定这一点,其中三种著名的方法如下:

  • tty- 打印连接到标准输入的终端的文件名:

    /dev/pts/10
    /dev/tty1
    

    此功能由 Sergiy Kolodyazhnyy 撰写,使用了tty

  • ps hotty $$(短缺ps --no-header --format tty --pid $$):

    pts/10
    tty1
    
  • who who whom | awk '{ print $2 }'who(事实上两个任意论点,等于who -m——这也符合双关语):

    pts/10
    tty1
    

我怀疑 的值TERM在不同的发行版甚至不同的版本之间会有所不同,但这tty是一种稳定可靠的方法。我会像这样使用它:

if tty|grep -q tty; then
  echo "That's a TTY."
else
  echo "That's not a TTY."
fi

who至少在似乎有问题gnome-terminal,幸运的是有一个包装脚本来解决这个问题。

有用的网址:

相关内容