如何区分终端窗口(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 + ALT + F3 )。

我的彩色提示在GUI终端中很好但很难全屏阅读,因为颜色看起来不同。 所以我想在控制台窗口中使用不同的颜色(例如cyan=$(tput setaf 6) )。 为了实现这个目的,我需要确定我当前$PS1 模式并相应地设置我的$PS1

我尝试了tty命令。 它给

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

我还试图检查$TERM的价值。 它给

 xterm-256color # GUI terminal linux # console 

他们两个都适合我,但我的问题是: 这是可靠区分控制台与终端的正确方法还是有更好的方法? 如果重要的话,我在17.10.1。

有很多方法可以确定,三个着名的是:

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

     /dev/pts/10 /dev/tty1 

    这个由Sergiy Kolodyazhnyy编写的函数使用了tty

  • ps hotty $$ps --no-header --format tty --pid $$缩写ps --no-header --format tty --pid $$ ):

     pts/10 tty1 
  • who who whom | awk '{ print $2 }' 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 

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

有用的url:

  • 如何检查我使用的是哪个
  • 如何获取运行bash的tty? ·Unix.SE
  • Bash Prompt HOWTO:检查当前TTY