Unyablog.

のにれんのブログ

tmux の if-shell は sh で実行される

tmux の if-shell ではシェルコマンドの結果に応じて実行するコマンドを変更できる。

今までここにバージョンによって設定を変化させるように書いていたが上手く動いていない時があった。

if-shell "[[ `tmux -V` =~ 2.[1-9]$ ]]" "set -g mouse on"

理由

tmux は sh -c でシェル部を実行しているため、 sh の実装が bash でない場合は [[ が使えない。*1

tmux/job.c at ddffda4da55e2d4040c981bfb5257c4f7281000f · tmux/tmux · GitHub

Fix

[ など、 sh でも使えるような(POSIX に準拠した)スクリプトに修正する。

今回は grep を使うようにした。

if-shell "tmux -V | grep -q '2.[1-9]'" "set -g mouse on"

github.com

間違えて yes を入れたときに、終了するために ps 見てたら sh -c yes が起動していたので気づいた。

*1:今回は dash だった