我正在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-color
or ,我的终端将设置为 color xterm-256color
。