终端条件ZSH_THEME

时间:2018-06-19 20:55:02

标签: terminal zsh oh-my-zsh zshrc terminal-emulator

我正在尝试在调用.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

所以事情变糟了,但是出于某种原因总是设置第一个选项

1 个答案:

答案 0 :(得分:0)

由于两个原因,此方法不起作用:

  1. 您使用[ ... ]而不是[[ ... ]]进行检查。区别在于[[ ... ]]是ZSH语法的一部分,而[(也称为test)是一个内置命令,试图模拟外部test程序。这很重要,因为[不支持=~运算符,它仅在[[ ... ]]内部可用。

  2. =~(与任何其他运算符一样)必须用空格包围。作为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)"