equivalente equivalente di "schermo -R"?


10

Il tmux attachcomando agisce più come una combinazione di screen -re screen -x- prima prova a collegarsi alla sessione staccata più di recente , quindi se non è disponibile, si collegherà a una sessione attualmente collegata. Voglio emulare il comportamento di screen -R: prima prova a collegarti a una sessione staccata, quindi avvia una nuova sessione se non ci sono sessioni staccate. Qual è il modo migliore per raggiungere questo obiettivo in tmux?

Risposte:


12

Dopo aver consultato i maghi di IRC, sono sicuro che non esiste un singolo comando tmux che abbia questo comportamento. Fortunatamente, è abbastanza facile emulare usando la shell:

(tmux ls | grep -vq attached && tmux at) || tmux

Modifica minore per eliminare l'output "impossibile connettersi al server: connessione rifiutata" nel caso in cui si avvii una nuova sessione:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite

3

Nonostante ciò che dice nel manuale di tmux:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

La risposta di Drew non funzionerà correttamente in una situazione come:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux atsi collegherà all'ultima sessione (n. 1) (anche se questa sessione è ancora collegata altrove). Ciò rovina l'idea di eseguire diverse sessioni di tmux e collegarle solo a una distaccata (per utilizzare mosh + tmux + iterm2 per creare un terminale di roaming perfetto).

Un altro approccio sarebbe quello di selezionare manualmente una sessione non collegata:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`


Buona pesca! La documentazione non è sincronizzata con il comportamento effettivo. Ho creato una segnalazione di bug per questo.
Ha disegnato Frank il

È disponibile una patch che risolve questo problema, quindi alla prossima versione dovrebbe comportarsi come pubblicizzato.
Ha disegnato Frank il

La patch è in 1.8?
Momeara,

2

Tendo ad avere solo due sessioni alla volta, quindi faccio qualcosa del genere in ogni finestra del terminale.

finestra terminale 0:

tmux attach -t 0 || tmux new

finestra terminale 1:

tmux attach -t 1 || tmux new

2

Questo ha funzionato al meglio per me:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-T è necessario per collegarsi alla sessione corretta.


1

Che dire

tmux attach || tmux new

oppure crea semplicemente il file ~/.tmux.confse non esiste e aggiungi

new-session

ad esso in modo tale da creare una nuova sessione quando non c'è nessuno quando si esegue tmux attach.

Potrebbe anche essere utile creare tmuxun alias tmux attach.


La prima proposta verrebbe allegata alle sessioni tmux attualmente collegate (simili a screen -x), che è qualcosa che voglio evitare. La seconda proposta presenta lo stesso problema e ha anche le indesiderabili conseguenze della creazione di sessioni tmux "extra" quando utilizzo il comando tmux source-file per ricaricare la configurazione.
Ha disegnato Frank il
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.