各セッションの最初のウィンドウだけがログインシェル(および他のすべての後続のウィンドウ/ウィンドウは非ログインシェル)をロードするようにtmuxをどのように設定できますか?

各セッションの最初のウィンドウだけがログインシェル(および他のすべての後続のウィンドウ/ウィンドウは非ログインシェル)をロードするようにtmuxをどのように設定できますか?

この投稿のタイトルが十分に説明されていることを願っています。

tmuxのマニュアルでよく説明されているように、tmux新しいtmuxウィンドウまたはウィンドウ(分割)が開始されるたびにログインシェルが起動します。

tmux代わりに、セッションごとに1つのログインシェル(おそらく最初のウィンドウ)のみが起動され、その後に作成されるすべてのウィンドウ/ウィンドウは、非ログインシェルになるように設定するにはどうすればよいですか?

~/.bash_profileこれが不可能な場合は、少なくともサーバーの起動時または読み取るようにtmuxを設定できますが、~/.profileサーバーで起動されたすべてのウィンドウは通常のtmux(非ログイン)シェルでなければなりませんか?

答え1

ラッパースクリプトのTmuxオプションを使用できますdefault-command。私はしばらく次の配列をうまく使用してきました。

  • PATHたとえば、次のスクリプトをどこかに置きます。/usr/local/bin/tmux-default-command

    #!/bin/sh
    
    default_shell=$(tmux show-options -gqv default-shell)
    default_shell=${default_shell:-$SHELL}
    default_shell=${default_shell:-/bin/bash}
    
    current_window=$(tmux display-message -p '#I')
    
    if [ "$current_window" = "0" ]; then
        tmux rename-window "Hello" && exec "$default_shell" -l
    else
        exec "$default_shell"
    fi
    
  • Tmux設定で

    default-shell   = '/bin/bash' # optional
    default-command = 'tmux-default-command'
    

-HTH

関連情報