ウィンドウ0からシェルをインポートするコマンドをインポートするときに「分割ウィンドウ」が必要なのはなぜですか?

ウィンドウ0からシェルをインポートするコマンドをインポートするときに「分割ウィンドウ」が必要なのはなぜですか?

次のようなものを使用してプロジェクトの共通設定を復元します。

setup_file=myproj.tmux
tmux new-session "tmux source-file $setup_file"

私は通常、新しいセッションを開始してそのセッションからコマンドを受け取ることが、新しいシェルでこれらの$setup_filetmuxコマンドを手動で実行するのと同じだと思いますが、そうではありません!違いは、ソーシング時にウィンドウ0にシェルが生成されないように見えるため、newwこのコマンドを実行するとウィンドウ1が生成されますが、すべてが設定されるとウィンドウ0が失われます。問題を解決するために を実行しましたがsplit-window、なぜこれが必要なのか理解できません。手がかり?

myproj.tmux

# window 0 - cli
rename-window 'cli';
split-window # not sure why this is needed to get a shell. Otherwise there is no window 0!

# window 1 - main window in the left pane and 3 minor windows in the right pane
neww
rename-window 'tools'
send-keys 'nvim' C-m  # editor
split-window -h -p 40 # build window (webpack, etc)
split-window -v -p 80             # cli
split-window -v -p 50             # test runner?
select-pane -L; # select the left pane; nvim

答え1

しかし、すべてが設定されたときにウィンドウ0がありません。

疑わしいものがない場合は、split-windowウィンドウ0のウィンドウで実行されるコードのみtmux source-file $setup_file$setup_file元のシェルに拡張されます)になります。すべてが設定されている場合、このコマンドは終了するので、唯一のウィンドウが終了するため、ウィンドウは終了します。

状況が変わる

tmux new-session "tmux source-file '$setup_file'; '$SHELL'"

このコマンドは元のコマンドよりも「よく」引用されていますが、まだ正しく引用されていません。 Bashでは、次のように正しい引用を得ることができます${var@Q}

tmux new-session "tmux source-file ${setup_file@Q}; ${SHELL@Q}"

関連情報