terminal - 终端的条件 ZSH_THEME
问题描述
我试图在调用 .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
所以它让事情变得正确,但出于某种原因总是设置第一个选项
解决方案
由于两个原因,这不起作用:
您正在使用
[ ... ]
而不是[[ ... ]]
检查。不同之处在于它[[ ... ]]
是 ZSH 语法的一部分,而[
(aka ) 是一个尝试模拟外部程序test
的内置命令。test
这很重要,因为[
不支持=~
运算符,它仅在内部可用[[ ... ]]
。(
=~
与任何其他运算符一样)需要被空格包围。作为 Unix shell,ZSH 在空格上标记命令。在这种情况下 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)"
推荐阅读
- c++ - 如何在 clang++ 中禁用矢量化?
- android - 将 GoogleSignInClient 与 libGDX 和 RelativeLayout 一起使用会导致 GoogleSignInIntent 重复显示并返回错误代码 13
- regex - Yii2 - 网址管理器 - 特定规则失败
- python - Keras Flatten Conv3D ValueError Flatten 的输入形状未完全定义
- c# - 在不同的端口上运行 AngularUI 和 Asp.net WebApi
- azure-cosmosdb - Gremlin Azure Cosmos graphSON 复杂对象
- python - 无法导入安装在新 Conda 环境中的软件包
- python - python中的展平矩阵:
- javascript - Mongodb v4.0 Transaction, MongoError: Transaction numbers are only allowed on a replica set member or mongos
- android - Usage of RxFloatingActionButton