如何配置 tmux 以仅使每个会话的第一个窗口加载登录 shell(以及所有其他后续窗格/窗口作为非登录 shell)?

如何配置 tmux 以仅使每个会话的第一个窗口加载登录 shell(以及所有其他后续窗格/窗口作为非登录 shell)?

希望这篇文章的标题具有足够的描述性。

正如 tmux 手册中详细记录的那样,tmux每次启动新的 tmux 窗口或窗格(拆分)时都会启动登录 shell。

相反,我如何配置tmux为每个会话仅启动一个登录 shell(可能是第一个窗口),并且创建的任何后续窗口/窗格都应是非登录 shell?

如果这是不可能的,至少我可以配置 tmux,以便在启动服务器时,它将读取~/.bash_profile~/.profile,但其中启动的任何窗口tmux都应是普通(非登录)shell?

答案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

相关内容