首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >条件ZSH_THEME按终端划分

条件ZSH_THEME按终端划分
EN

Stack Overflow用户
提问于 2018-06-19 20:55:01
回答 1查看 607关注 0票数 0

我试图在调用.zshrc时,根据我正在运行的终端模拟器来选择一个特定的主题。为此,我想到了:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
/usr/bin/tilix --gapplication-service

默认终端:

代码语言:javascript
运行
复制
/usr/lib/gnome-terminal/gnome-terminal-server

所以它得到了赖特的东西,但出于某种原因,设置总是第一个选择

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 11:44:41

由于以下两个原因,这一方法不起作用:

  1. 检查时使用的是[ ... ]而不是[[ ... ]]。区别在于,[[ ... ]]是ZSH语法的一部分,[ (又名test)是一个内置命令,试图模仿外部test程序。这很重要,因为[不支持=~操作符,它只能在[[ ... ]]中使用。
  2. =~ (和任何其他操作符一样)需要被空格包围。作为Unix,ZSH在空格上标记命令。在本例中,我猜想ZSH只检查$current_terminal=~'tilix'是否为非空字符串,而不是将$current_terminal'tilix'进行比较。这就是为什么您总是得到powerlevel9k主题的原因。

所以情况应该是这样的:

代码语言:javascript
运行
复制
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)"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50936818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档