确定终端的类型(经典的Unix终端与图形终端)

时间:2013-07-23 15:10:56

标签: bash

我正在通过 .bashrc 配置我的提示符(PS1),发现我当前配置存在一个问题:我使用的是256色配色方案。这与经典终端不兼容(可通过例如 Ctrl + Alt + F2 访问)但在图形终端(如gnome-terminal)中看起来很漂亮,终结者等。

所以我必须根据终端类型更改提示。为此,我需要if子句的条件来测试终端的类型。你知道怎么做吗?

5 个答案:

答案 0 :(得分:5)

TERM变量表示终端类型。 当在x终端中运行时,它通常是xterm(但也可以是xterm-color-256,正如德米特里在他的回答中所暗示的那样)。 以下代码检查$ TERM的值是否以xterm开头(因此捕获了几个案例):

case "$TERM" in
   xterm*)
      echo "running as an x-terminal"
      ;;
   *)
      echo "not running as an x-terminal"
      ;;
esac

答案 1 :(得分:3)

echo $TERM会为您提供终端类型

答案 2 :(得分:2)

这应该有效:

if [ "$TERM" == "xterm-color-256" ]; then echo "YES"; fi

答案 3 :(得分:2)

另一种方法:查看当前shell的父进程。如果是“登录”,则您在控制台

parent=$(ps --pid $(ps --pid $$ --no-headers --format ppid) --no-headers --format cmd)
if [[ $parent == login* ]]; then
    echo console
    PS1='plain> '
else
    echo assume you can get away with more
    PS1='fancy> '
fi

答案 4 :(得分:1)

您可以使用$TERM的值来决定是否有彩色终端,但可以修改此值。问题是在打开新的终端窗口时设置此环境变量的位置。

这将在.bashrc文件中。但是,一句警告:

  • $TERM的价值可能是谎言。这只是一个设置的环境变量。如何设置由终端程序决定(在Mac上,Terminal.app可以将终端设置为xtermxterm-colorvt100ansi,和其他几个..
  • 终端可以是彩色终端,但不使用ANSI颜色代码。如果您只是假设特定的转义序列为您提供特定颜色,则可能会遇到麻烦。
  • 如果您的提示已在.bashrc文件中设置,则更改$TERM的值不会更改提示。

那就是说,我可能会这样做:

case $TERM in
    *color*)    PS1=...;;
    *)          PS1=...;;
esac

这样,如果我说的是xterm-colorxterm-256color,我的终端将设置为彩色。