なぜ 'tmux'はデフォルトでログインシェルとして新しいウィンドウを作成するのですか?


26

tmux実行中のセッションで新しいセッションを開始したり、実行中のセッション内に新しいウィンドウを作成したりするときのデフォルトの動作は、シェル(例:)をbashログインシェルとして実行することです。

ログインシェルは、システムにログインしているときに関心のある設定や手順のルーチンを実行することを意図していることを理解しています。ただし、ほとんどの場合(ログインシェルtmux として使用できることを除いて)、ユーザーが新しいウィンドウを開きたいだけの場合、これを行うのは本当の意図ではありません。

これをデフォルトの動作にする理由は何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.

回答:


24

対話型の非ログインシェルは通常、トップレベルのログインシェルより長く存続することはないため、それによって開始された機能はいつでも利用できると期待できますが、tmuxの場合はそうではありません。

  • シェルにログインする->ログインスクリプトが実行される
  • あなたはtmuxを実行し、何かをし、切り離します
  • トップレベルシェルを終了->ログアウトスクリプトが実行されます
  • tmuxセッションはまだ実行中ですが、ログインシェルによって開始された機能は現在利用できません
  • 再度ログインし、別のログインシェルから再接続します
  • 新しいログインシェルによって開始された機能は、tmuxによって表示されない場合があります。これは、tmuxが古い環境で実行されているためです(環境を更新するコマンドがある場合でも)

とにかくtmuxでログインシェルを起動する必要はないと考える人もいるかもしれません。ほとんどのセットアップではログアウトスクリプトがなく、ログインスクリプトは環境変数を設定するだけだからです。

さらに、ログインスクリプトの環境変数に文字列を追加すると(PATH = $ PATH:/ some / other / pathなど)、同じプロセス階層で複数回実行され、重複することになります。最も迷惑です。

それでも、デフォルトは理にかなっていると思う傾向があります。

こちらもご覧ください:http : //openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html


2
回答とリンクをありがとう!私exec shは最後に一緒に暮らすことができると思います...(私はそれを考えていませんでした。)
レオガマ

3
tmuxがログインシェルを生成しなかった場合に破損する可能性のある具体的な例はありますか?これをデフォルトにすることを考えていますが、将来的には診断が難しい問題に遭遇したくありません。
カールパテナウードポーリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.