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


26

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

我知道登录外壳程序旨在执行仅在您登录系统时才有意义的配置和过程例程。但是在大多数情况下(除了您可以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.

Answers:


24

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

  • 您登录到您的外壳程序->您的登录脚本运行
  • 您运行tmux,执行某些操作,分离
  • 退出顶层shell->运行注销脚本
  • tmux会话仍在运行,但是登录外壳启动的任何功能目前都不可用
  • 您再次登录,然后从另一个登录外壳重新附加
  • tmux可能看不到新登录外壳启动的任何功能,因为它仍在旧环境中运行(即使有命令可以更新环境)

有些人可能认为没有必要使用tmux启动登录Shell,因为在大多数设置中,没有注销脚本,而登录脚本只是设置了一些环境变量。

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

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

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


2
感谢您的回答和链接!我想我exec sh最终可以忍受...(我没想到。)
leogama

3
如果tmux不生成登录shell,您是否有任何可能破坏事情的具体示例?我正在考虑将其设置为默认值,但我不想在生产过程中遇到难以诊断的问题。
卡尔·帕特纳德·波林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.