为什么默认情况下“tmux”会创建新窗口作为登录 shell?

leo*_*ama 35 shell tmux

当您在tmux正在运行的会话中启动新会话或在其中创建新窗口时,其默认行为是运行 shell(例如:)bash作为登录 shell。

我知道登录 shell 的目的是在您登录系统时执行您感兴趣的配置和过程的例行程序。但是在大多数情况下(除了可以tmux 用作登录 shell 的情况外),当用户只想打开一个新窗口时,这样做并不是用户的真正意图。

那么将其作为 的默认行为的理由是tmux什么?


文档中关于此事的唯一说明:

default-command  shell-command
        Set the command used for new windows (if not specified when the
        window is created) to shell-command, which may be any sh(1)
        command.  The default is an empty string, which instructs tmux
        to create a login shell using the value of the default-shell
        option.
Run Code Online (Sandbox Code Playgroud)

小智 31

交互式非登录 shell 通常永远不会超过您的顶级登录 shell,因此他们可以期望任何由它启动的功能随时可用,但 tmux 并非如此:

  • 您登录到您的 shell -> 您的登录脚本已运行
  • 你运行 tmux,做点什么,分离
  • 退出您的顶级 shell -> 您的注销脚本已运行
  • tmux 会话仍在运行,但此时您的登录 shell 启动的任何功能都不可用
  • 您再次登录并从另一个登录外壳重新附加
  • tmux 可能看不到由新登录 shell 启动的任何工具,因为它仍在旧环境中运行(即使有更新环境的命令)

有些人可能认为无论如何都没有必要让 tmux 启动登录 shell,因为在大多数设置中没有注销脚本,而登录脚本只是设置了一些环境变量。

此外,如果您在登录脚本中将字符串附加到环境变量中(例如:PATH=$PATH:/some/other/path)并且它们在同一进程层次结构中运行不止一次,您最终会得到重复,这是最烦人。

但我仍然倾向于认为默认设置是有道理的。

另见:http : //openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html

  • 如果 tmux 没有生成登录外壳,您是否有任何可能破坏的具体示例?我正在考虑将其设为默认值,但我不想遇到难以诊断的问题。 (3认同)
  • 感谢您的回答和链接!我想我最终可以忍受`exec sh`...(我没想到。) (2认同)