终端有条件 ZSH_THEME

Conditional ZSH_THEME by terminal

我正在尝试在调用 .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 主题一起工作得很好,但仅此而已,它似乎不符合条件,我不不知道我的赌注在哪里 =/

我使用的每个终端仿真器中变量 current_terminal 的输出是:

蒂利克斯:

/usr/bin/tilix --gapplication-service

默认终端:

/usr/lib/gnome-terminal/gnome-terminal-server

所以它让事情变得正确,但出于某种原因设置始终是第一个选项

由于两个原因,这不起作用:

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

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