我正在通过 .bashrc 配置我的提示符(PS1
),发现我当前配置存在一个问题:我使用的是256色配色方案。这与经典终端不兼容(可通过例如 Ctrl + Alt + F2 访问)但在图形终端(如gnome-terminal)中看起来很漂亮,终结者等。
所以我必须根据终端类型更改提示。为此,我需要if
子句的条件来测试终端的类型。你知道怎么做吗?
答案 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
可以将终端设置为xterm
,xterm-color
,vt100
,ansi
,和其他几个.. .bashrc
文件中设置,则更改$TERM
的值不会更改提示。那就是说,我可能会这样做:
case $TERM in
*color*) PS1=...;;
*) PS1=...;;
esac
这样,如果我说的是xterm-color
或xterm-256color
,我的终端将设置为彩色。