我试图在调用.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)"我在运行时没有收到任何错误消息,当我打开powerlevel9k时,它与主题工作得很好,但它似乎不尊重这个条件,我不知道我的mstake在哪里=/
在我使用的每个终端模拟器中,变量current_terminal的输出如下:
Tilix:
/usr/bin/tilix --gapplication-service默认终端:
/usr/lib/gnome-terminal/gnome-terminal-server所以它得到了赖特的东西,但出于某种原因,设置总是第一个选择
发布于 2018-06-20 11:44:41
由于以下两个原因,这一方法不起作用:
[ ... ]而不是[[ ... ]]。区别在于,[[ ... ]]是ZSH语法的一部分,[ (又名test)是一个内置命令,试图模仿外部test程序。这很重要,因为[不支持=~操作符,它只能在[[ ... ]]中使用。=~ (和任何其他操作符一样)需要被空格包围。作为Unix,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)"https://stackoverflow.com/questions/50936818
复制相似问题