reattach-to-user-namespaceが無くてもtmuxを起動させる

自宅の開発環境としてUbuntuデスクトップを使うようにしてみました. 元々定義していた.tmux.confだとreattach-to-user-namespaceがある前提で書かれておりtmuxが起動しなかったので、 最低限起動できるように条件分岐させてmacOSでもUbuntuでもどちらでも起動するようにしてみました.

動作環境

環境固有の問題の可能性もあるのでツールやソフトウェアのバージョンを書いておきます.

  • tmux ... 2.1
  • zsh ... 5.1.1

reattach-to-user-namespaceがある時だけ実行させる

まずは変更前の.tmux.confを見てみます.

...
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
set -g default-command "reattach-to-user-namespace -l ${SHELL}" # ここ
set-option -g renumber-windows on
...

default-commandでreattach-to-user-namespaceが指定されており、必ずここで落ちます.
Ubuntuの環境ではreattach-to-user-namespaceはインストールしていない、というよりもまず使う必要はないため、
実行されないことが期待する挙動になります.

後はtmuxのif-shellを利用して「reattach-to-user-namespaceがある時のみdefault-command`を実行」されるように変更します.

...
if-shell "[ -x $(where reattach-to-user-namespace) ]" 'set -g default-command "reattach-to-user-namespace -l ${SHELL}"
...

これでUbuntu環境でもtmuxが起動するようになり、macOSではreattach-to-user-namespaceが呼び出され、どちらの環境でも期待した動作になりました.