如何区分终端窗口(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