Dlaczego „tmux” domyślnie tworzy nowe okna jako powłoki logowania?

26

Gdy zaczynasz nową sesję tmuxlub tworzysz nowe okno w trwającej sesji, jej domyślnym zachowaniem jest uruchamianie powłoki (np .:) bashjako powłoki logowania.

Rozumiem, że powłoka logowania ma na celu wykonanie procedury konfiguracji i procedur, które są interesujące tylko podczas logowania do systemu . Ale w większości przypadków (z wyjątkiem tego, że można użyć go tmux jako powłoki logowania), użytkownik nie chce tego robić, gdy chce tylko otworzyć nowe okno.

Jakie jest więc uzasadnienie, aby uczynić to domyślnym zachowaniem tmux?


Jedyne, co mówi o tym dokumentacja:

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
źródło

Odpowiedzi:

24

Interaktywna powłoka niezalogowana zwykle nigdy nie przeżywa powłoki logowania najwyższego poziomu, dlatego mogą oczekiwać, że wszelkie uruchomione przez nią funkcje będą dostępne w dowolnym momencie, ale nie jest tak w przypadku tmux:

  • logujesz się do swojej powłoki -> uruchamiane są skrypty logowania
  • uruchamiasz tmux, zrób coś, odłącz się
  • wyjdź z powłoki najwyższego poziomu -> uruchomione są skrypty wylogowania
  • Sesja tmux nadal działa, ale żadne funkcje uruchomione przez powłokę logowania nie są obecnie dostępne
  • ponownie się logujesz i dołączasz ponownie z innej powłoki logowania
  • wszelkie funkcje uruchomione przez nową powłokę logowania mogą być niewidoczne dla tmux, ponieważ nadal działa ze starym środowiskiem (mimo że istnieją polecenia do aktualizacji środowiska)

Niektórzy mogą myśleć, że posiadanie powłoki startowej tmux i tak nie jest konieczne, ponieważ w większości konfiguracji nie ma skryptów wylogowania, a skrypty logowania po prostu konfigurują niektóre zmienne środowiskowe.

Ponadto, jeśli dodasz ciągi do zmiennych środowiskowych w swoich skryptach logowania (takich jak: PATH = $ PATH: / some / other / path) i będą one uruchamiane więcej niż jeden raz w tej samej hierarchii procesów, otrzymujesz duplikaty, a to jest najbardziej irytujący.

Ale nadal uważam, że domyślnie ma sens.

Zobacz także: http://openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html

Lew
źródło
2
Dziękujemy za odpowiedź i link! Myślę, że w końcu mogę z tym żyć exec sh... (nie myślałem o tym.)
leogama,
3
Czy masz jakieś konkretne przykłady rzeczy, które mogłyby się zepsuć, gdyby tmux nie spawnował powłoki logowania? Zastanawiam się nad tym, by ustawić to jako domyślne, ale nie chcę napotykać trudnych do zdiagnozowania problemów.
Carl Patenaude Poulin,