Perché 'tmux' crea di default nuove finestre come shell di login?


26

Quando si avvia una nuova sessione tmuxo si crea una nuova finestra all'interno di una sessione in esecuzione, il suo comportamento predefinito è quello di eseguire una shell (es .:) bashcome shell di login.

Comprendo che una shell di accesso ha lo scopo di eseguire una routine di configurazioni e procedure che sono di interesse proprio quando si accede a un sistema . Ma nella maggior parte dei casi (con l'eccezione che puoi usare tmux come shell di accesso) non è il vero intento dell'utente di farlo quando vuole solo aprire una nuova finestra.

Quindi qual è la logica per rendere questo il comportamento predefinito di tmux?


L'unica cosa che la documentazione dice sull'argomento:

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.

Risposte:


24

La shell interattiva non di accesso di solito non sopravvive mai alla shell di accesso di livello superiore, quindi possono aspettarsi che tutte le strutture avviate da essa siano disponibili in qualsiasi momento, ma questo non è il caso di tmux:

  • accedi alla shell -> vengono eseguiti gli script di accesso
  • corri, fai qualcosa, stacca
  • esci dalla shell di livello superiore -> vengono eseguiti gli script di logout
  • La sessione di tmux è ancora in esecuzione ma tutte le strutture avviate dalla shell di accesso non sono disponibili al momento
  • accedi di nuovo e ricolleghi da un'altra shell di accesso
  • qualsiasi funzione avviata dalla nuova shell di login potrebbe non essere visibile da tmux perché è ancora in esecuzione con il vecchio ambiente (anche se ci sono comandi per aggiornare l'ambiente)

Alcuni potrebbero pensare che avere tmux start shell di accesso non sia comunque necessario perché nella maggior parte delle configurazioni non ci sono script di logout e gli script di login hanno appena impostato alcune variabili di ambiente.

Inoltre, se aggiungi stringhe alle variabili di ambiente nei tuoi script di login (come questo: PATH = $ PATH: / some / other / path) e vengono eseguite più di una volta nella stessa gerarchia di processi, finisci con i duplicati, e questo è più fastidioso.

Ma continuo a pensare che il valore predefinito abbia senso.

Vedi anche questo: http://openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html


2
Grazie per la risposta e per il link! Penso di poter convivere exec shalla fine ... (Non ci avevo pensato.)
Leogama,

3
Hai qualche esempio concreto di cose che potrebbero rompersi se tmux non generasse una shell di accesso? Sto pensando di impostarlo come predefinito, ma non voglio incontrare problemi difficili da diagnosticare.
Carl Patenaude Poulin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.