Per*_*uck 3 command-line gnome-terminal virtual-console
我使用彩色的 bash 提示,如下所示:
blue=$(tput setaf 4)
reset=$(tput sgr0)
bold=$(tput bold)
export PS1='($?) \[$bold$blue\]\u@\h:\w\[$reset\]$(__git_ps1)> '
Run Code Online (Sandbox Code Playgroud)
我通常在终端窗口(gnome-terminal)中工作,但有时在全屏控制台(CTRL+ ALT+ F3)中工作。
我的彩色提示在 GUI 终端中很好,但很难在全屏模式下阅读,因为颜色看起来不同。所以我想cyan=$(tput setaf 6)
在控制台窗口中使用不同的颜色(例如)。为此,我需要弄清楚我当前处于哪种模式并相应地设置我的模式$PS1
。
我试过tty
命令。它给
/dev/pts/0 # GUI terminal
/dev/tty3 # console
Run Code Online (Sandbox Code Playgroud)
我还尝试检查$TERM
. 它给
xterm-256color # GUI terminal
linux # console
Run Code Online (Sandbox Code Playgroud)
他们两个都适合我,但我的问题是:这是可靠区分控制台与终端的正确方法还是有更好的方法?如果那重要的话,我在 17.10.1。
有多种方法可以确定,三个著名的方法是:
tty
- 打印连接到标准输入的终端的文件名:
/dev/pts/10
/dev/tty1
Run Code Online (Sandbox Code Playgroud)
Sergiy Kolodyazhnyy 编写的这个函数使用了tty
.
ps hotty $$
(简称ps --no-header --format tty --pid $$
):
pts/10
tty1
Run Code Online (Sandbox Code Playgroud)who who whom | awk '{ print $2 }'
(事实上,这是who
有两个任意参数,等于who -m
– 这也匹配双关语):
pts/10
tty1
Run Code Online (Sandbox Code Playgroud)我怀疑TERM
发行版甚至发行版之间的值不同,但这tty
是一种稳定可靠的方法。我会像这样使用它:
if tty|grep -q tty; then
echo "That's a TTY."
else
echo "That's not a TTY."
fi
Run Code Online (Sandbox Code Playgroud)
至少who
在 in 中似乎存在问题gnome-terminal
,幸运的是有一个包装脚本可以解决这个问题。
有用的网址: