我正在PS1通过.bashrc配置提示符 ( ) ,发现当前配置存在一个问题:我使用的是 256 配色方案。Ctrl这与经典终端(可通过例如++访问Alt)不兼容,F2但在 gnome-terminal、终结器等图形终端中看起来很漂亮。
所以我必须根据终端的类型来改变我的提示。为此,我需要一个条件 forif子句来测试终端的类型。你知道怎么做吗?
我正在PS1通过.bashrc配置提示符 ( ) ,发现当前配置存在一个问题:我使用的是 256 配色方案。Ctrl这与经典终端(可通过例如++访问Alt)不兼容,F2但在 gnome-terminal、终结器等图形终端中看起来很漂亮。
所以我必须根据终端的类型来改变我的提示。为此,我需要一个条件 forif子句来测试终端的类型。你知道怎么做吗?
该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
echo $TERM会给你终端类型
另一种做法:查看当前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
这应该有效:
if [ "$TERM" == "xterm-color-256" ]; then echo "YES"; fi
您可以使用 的值$TERM来决定是否有彩色终端,但可以修改此值。问题是当打开一个新的终端窗口时这个环境变量被设置在哪里。
这将在.bashrc文件中。但是,警告一句:
$TERM可能是一个谎言。这只是一个设置的环境变量。如何设置由终端程序确定(在 Mac 上,Terminal.app可以将终端设置为xterm、xterm-color、vt100、ansi和其他几个...bashrc文件中设置了提示,则更改 的值$TERM不会更改提示。也就是说,我可能会做这样的事情:
case $TERM in
*color*) PS1=...;;
*) PS1=...;;
esac
这样,如果我说它是xterm-coloror ,我的终端将设置为 color xterm-256color。