Configuration

tmux 配置:命令輸出替換不

  • March 14, 2022

我正在嘗試.tmux.conf根據我所使用的系統類型使我的部分文件有條件。首先,我希望僅在 MacOS 上處理一個部分。

手冊頁說我可以使用#(COMMAND)語法來替換COMMAND格式的輸出,特別是在條件中。所以我正在嘗試這個:

%if "#{==:#(/usr/bin/uname -s),Darwin}"
CONF-COMMANDS
%endif

但是沒有運氣,CONF-COMMANDS在Mac上被忽略了。當然,我已經驗證了“達爾文”確實是uname -s. 如您所見,我使用絕對文件名來消除任何PATH問題。我還驗證了這個微不足道的條件%if "#{==:Darwin,Darwin}"實際上是有效的。所以我一定在語法上做錯了什麼。它是什麼?

我感覺您遇到了手冊頁中描述的情況:

構造格式時,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 一起工作。

引用自:https://unix.stackexchange.com/questions/694285