4

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

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

4

5 回答 5

5

TERM变量表示终端类型。在 x 终端中运行时,通常是xterm(但也可以xterm-color-256像 Dmitry 在他的回答中暗示的那样)。以下代码检查 $TERM 的值是否以开头xterm(因此捕获了几种情况):

case "$TERM" in
   xterm*)
      echo "running as an x-terminal"
      ;;
   *)
      echo "not running as an x-terminal"
      ;;
esac
于 2013-07-23T15:16:22.033 回答
3

echo $TERM会给你终端类型

于 2013-07-23T15:15:59.477 回答
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
于 2013-07-23T18:09:42.200 回答
2

这应该有效:

if [ "$TERM" == "xterm-color-256" ]; then echo "YES"; fi
于 2013-07-23T15:15:41.653 回答
1

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

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

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

也就是说,我可能会做这样的事情:

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

这样,如果我说它是xterm-coloror ,我的终端将设置为 color xterm-256color

于 2013-07-23T16:45:34.640 回答