Warum erstellt 'tmux' standardmäßig neue Fenster als Login-Shells?

26

Wenn Sie eine neue Sitzung in tmuxeiner laufenden Sitzung starten oder ein neues Fenster in einer laufenden Sitzung erstellen, wird standardmäßig eine Shell (z. B. bash) als Anmeldeshell ausgeführt.

Ich verstehe, dass eine Login-Shell eine Routine von Konfigurationen und Prozeduren ausführen soll, die nur dann von Interesse sind, wenn Sie sich in einem System anmelden . In den meisten Fällen (mit der Ausnahme, dass Sie sie tmux als Anmeldeshell verwenden können) ist es jedoch nicht die wahre Absicht des Benutzers, dies zu tun, wenn er nur ein neues Fenster öffnen möchte.

Was ist der Grund dafür, dass dies das Standardverhalten von ist tmux?


Das Einzige, was die Dokumentation dazu sagt:

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.
Leogama
quelle

Antworten:

24

Die interaktive Nicht-Login-Shell überlebt Ihre Anmeldeshell der obersten Ebene in der Regel nicht. Daher können sie davon ausgehen, dass alle von ihr gestarteten Funktionen jederzeit verfügbar sind. Dies ist jedoch bei tmux nicht der Fall:

  • Sie melden sich bei Ihrer Shell an -> Ihre Anmeldeskripte werden ausgeführt
  • Sie tmux ausführen, etwas tun, trennen
  • Verlassen Sie Ihre Top-Level-Shell -> Ihre Abmeldeskripte werden ausgeführt
  • Die tmux-Sitzung wird noch ausgeführt, aber alle von Ihrer Anmeldeshell gestarteten Funktionen sind derzeit nicht verfügbar
  • Sie melden sich erneut an und stellen eine neue Verbindung über eine andere Anmeldeshell her
  • Funktionen, die von der neuen Login-Shell gestartet wurden, werden von tmux möglicherweise nicht angezeigt, da sie noch in der alten Umgebung ausgeführt werden (obwohl Befehle zum Aktualisieren der Umgebung vorhanden sind).

Einige mögen denken, dass es sowieso unnötig ist, tmux-Anmeldeshells zu starten, da in den meisten Setups keine Abmeldeskripte vorhanden sind und Anmeldeskripte nur einige Umgebungsvariablen einrichten.

Wenn Sie außerdem in Ihren Anmeldeskripten Zeichenfolgen an Ihre Umgebungsvariablen anhängen (wie folgt: PATH = $ PATH: / some / other / path) und diese mehrmals in derselben Prozesshierarchie ausgeführt werden, erhalten Sie Duplikate am ärgerlichsten.

Aber ich neige immer noch dazu zu denken, dass die Standardeinstellung Sinn macht.

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

Löwe
quelle
2
Danke für die Antwort und den Link! Ich glaube, ich kann exec sham Ende damit leben ... (
Daran
3
Haben Sie konkrete Beispiele für Probleme, die auftreten könnten, wenn tmux keine Anmelde-Shell erzeugt? Ich denke darüber nach, dies zu meiner Standardeinstellung zu machen, aber ich möchte nicht später auf schwer zu diagnostizierende Probleme stoßen.
Carl Patenaude Poulin