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.