我试图.tmux.conf
根据我所在的系统类型使文件的某些部分成为有条件的。首先,我希望仅在 MacOS 上处理一个零件。
手册页说我可以使用#(COMMAND)
语法来替换 in 格式的输出COMMAND
,特别是在条件中。所以我正在尝试这个:
%if "#{==:#(/usr/bin/uname -s),Darwin}"
CONF-COMMANDS
%endif
但运气不好,CONF-COMMANDS
在 Mac 上被忽略了。当然,我已经验证过,“Darwin”确实是 的输出uname -s
。正如您所看到的,我使用绝对文件名来消除任何PATH
问题。我还验证了这个简单的条件%if "#{==:Darwin,Darwin}"
实际上是有效的。所以我在语法方面肯定做错了什么。它是什么?
答案1
我有一种感觉,您遇到了手册页中描述的情况:
在构建格式时,tmux 不会等待
#()
命令完成;相反,使用运行相同命令的先前结果,或者如果之前未运行过该命令,则使用占位符。
您可以通过以下方式在 Tmux 会话中演示这一点:
tmux display-message -p "#(uname -s)"
哪个应该返回<'uname -s' not ready>
。
考虑使用以下if-shell
替代方案%if
:
tmux if-shell '[ "$(uname -s)" = "Darwin" ]' "CONF-COMMAND; CONF-COMMAND2; ..."
在 Tmux 3.2a 下,语法更加清晰:
tmux if-shell '[ "$(uname -s)" = "Darwin" ]' {
CONF-COMMAND1
CONF-COMMAND2
}
未在 Mac 上进行测试,但已确认可与 WSL/Ubuntu/Bash 配合使用。我认为它应该与 Mac/Zsh 一起工作。