tmux 構成: コマンド出力の置換はありません。

tmux 構成: コマンド出力の置換はありません。

.tmux.conf現在使用しているシステムの種類に応じて、ファイルの特定の部分を条件付きにしようとします。まず、MacOSでは1つの部分だけを作業したいと思います。

マニュアルページでは、#(COMMAND)構文を使用して特に条件付き形式の出力を置き換えることができますCOMMAND。だから私はこれを試しています:

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

しかし、幸運ではありません。CONF-COMMANDSMacでは無視されます。もちろん「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で動作する必要があると思います。

おすすめ記事