tmux 配置:命令输出替换不会

tmux 配置:命令输出替换不会

我试图.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 一起工作。

相关内容