Come avviare tmux con attach se esiste una sessione


Risposte:


52

La risposta è molto più semplice. Metti questo nel tuo ~/.tmux.conffile:

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

Se corri tmux attache c'è una sessione, allora si collegherà a quella sessione (che sia già collegata o meno). Se c'è non è una sessione già allora creerà uno per te.


11
questo è un trucco, ma c'è un avvertimento: se tmuxviene invocato senza argomenti, creerà una nuova sessione e quindi creerà una seconda sessione non appena raggiungerà questa linea nel tuo ~/.tmux.conf. È possibile visualizzare questo problema eseguendo tmux lsdopo aver creato la prima sessione. In pratica, dopo aver inserito questo nel tuo file, non puoi più chiamare tmuxsenza argomenti
— Bruno Polaco,

4
Quindi dovresti aggiungere un alias alias tmux="tmux attach"per prevenire questo problema
— rubo77

@BrunoPolaco: qual è il grande avvertimento con una sessione tmux extra vuota in esecuzione tutto il tempo (a parte questo non sembra ordinata nell'elenco delle attività)?
— rubo77,

Risorse @ rubo77. Alcune persone hanno alcuni strumenti predefiniti, finestre, riquadri, ecc. Creati all'avvio tmux.
— rovr138,

129

Se la denominazione della sessione va bene, allora è facile fare con il new-sessioncomando:

tmux new-session -A -s main

dove si maintrova il nome della sessione che verrà associato o creato se necessario.

Da man tmux:

Il -Aflag si new-sessioncomporta come attach-sessionse il nome della sessione esistesse già; in questo caso, -Dsi comporta come -da attach-session.

Si noti inoltre che l' -Aopzione è stata introdotta nella versione tmux 1.8dal 26 marzo 2013 , per le versioni precedenti utilizzare tmux attach || tmux.


10
+1 per l'utilizzo della funzionalità integrata e la fornitura dello snippet di documenti man
— Ari Patrick

1
Nel mio elenco di alias: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". Grazie per il consiglio! Pagina del manuale: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
— Jeroen Wiert Pluimers

tmux: unknown option -- AQuesto sembra essere disponibile solo nelle versioni recenti.
— xApple

Questo è il metodo che ho usato, ma non puoi più usare "tmux detach". È necessario utilizzare il collegamento <ctrl> b - d per salvare ed uscire da una sessione esistente.
— Jess,

2
[ -z "$TMUX" ] && exec tmux new -As .questo è quello che uso nel mio .bashrc.
— reno il

30

Questo avvierà una nuova sessione se attach dà un errore:

tmux attach || tmux new

Quindi un alias farà il lavoro:

tm="tmux attach || tmux new"

Puoi anche accorciarlo cambiando tmux attachpertmux a
— Bruno Polaco,

Sebbene sia funzionale, la soluzione di Wesley Baugh utilizza la funzionalità integrata di tmux per fare la stessa cosa
— Ari Patrick,

dopo questa sembra la migliore risposta per le versioni precedenti, prima che fosse introdotta -A (es. v1.6)
— Christopher Peterson

3

Valuta di aggiungere quanto segue al tuo .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

Puoi vedere il mio uso di questo nel mio file di risorse ZSH nel mio repository github


2

Per espandere la risposta di Wesley Baugh (che era per me sessioni a doppio annidamento quando usato in .bashrc al momento degli accessi) e aggiungere un po 'di flessibilità dato che spesso uso sudo -ssui server (che caricava di nuovo diligentemente il mio .bashrc e doppio annidamento), ecco quello che ho nel mio .bashrc:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

Questo verifica la presenza di una sessione tmux e si assicura che non si sia superutente prima di creare una nuova sessione o collegarsi a quella esistente denominata main.


1

Drew Frank ha risposto qui: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

Ecco lo script che ora uso per questo (però, sono tornato allo schermo a causa di un altro problema con tmux) /somewhere/on/your/path/ttmuxo come funzione shell:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

Le -2opzioni consentono a tmux di assumere un supporto per terminali a 256 colori, quindi potrebbero non essere appropriati per la tua situazione.



1

Ho migliorato un po 'la risposta a @SuperMagic. Ho messo questo blocco in cima al mio.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
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.