我正在尝试在调用.zshrc时根据正在运行的终端仿真器选择特定主题。为此,我想到了:
current_terminal="$(ps -p$PPID -o cmd=)"
function choose_theme {
if [ $current_terminal=~'tilix' ];
then echo 'powerlevel9k/powerlevel9k';
else echo 'robbyrussell';
fi
}
ZSH_THEME="$(choose_theme)"
运行时我没有收到任何错误消息,当我在tilix上打开时,它与powerlevel9k主题也可以正常工作,但仅此而已,它似乎没有遵守条件,而且我不知道我的位置在哪里mstake是= /
我正在使用的每个终端仿真器中变量current_terminal的输出是:
Tilix:
/usr/bin/tilix --gapplication-service
默认终端:
/usr/lib/gnome-terminal/gnome-terminal-server
所以事情变糟了,但是出于某种原因总是设置第一个选项
答案 0 :(得分:0)
由于两个原因,此方法不起作用:
您使用[ ... ]
而不是[[ ... ]]
进行检查。区别在于[[ ... ]]
是ZSH语法的一部分,而[
(也称为test
)是一个内置命令,试图模拟外部test
程序。这很重要,因为[
不支持=~
运算符,它仅在[[ ... ]]
内部可用。
=~
(与任何其他运算符一样)必须用空格包围。作为Unix shell,ZSH在空白处标记命令。在这种情况下,我可能会猜测ZSH仅检查$current_terminal=~'tilix'
是否为非空字符串,而不是将$current_terminal
与'tilix'
进行比较。情况总是如此,因此为什么总是获得powerlevel9k主题。
因此条件应如下所示:
current_terminal="$(ps -p$PPID -o cmd=)"
function choose_theme {
if [[ $current_terminal =~ 'tilix' ]];
then echo 'powerlevel9k/powerlevel9k';
else echo 'robbyrussell';
fi
}
ZSH_THEME="$(choose_theme)"