Crea una nuova sessione tmux dall'interno di una sessione tmux


105

Sto scrivendo uno script di shell che crea / collega o passa a una data sessione, a seconda che uno sia all'interno di tmux e la sessione esista.

Tutto funziona alla grande tranne il caso che richiede la creazione di una nuova sessione tmux dall'interno di una sessione tmux.

Quando il mio script viene eseguito tmux new-session -s name, ottengo il seguente output:

le sessioni dovrebbero essere annidate con cura, annullando l'impostazione di $ TMUX per forzare

In realtà non voglio annidare le sessioni, il mio obiettivo è creare un'altra sessione separata e passare ad essa dall'interno di una sessione tmux .

È possibile?


2
Una GRANDE risorsa per gli utenti che trovano questa domanda: leanpub.com/the-tao-of-tmux/read
0xSheepdog

Risposte:


142

Il modo più veloce (supponendo che tu lo usi ctrl-bcome prefisso del comando) è:

ctrl-b :new

Per creare una nuova sessione, quindi

ctrl-b s

per selezionare e allegare interattivamente alla sessione.


5
+1 per la soluzione a cui non importa "le sessioni dovrebbero essere annidate con cura, non impostato $ TMUX per forzare"
Marcin Rogacki

3
e quindi potresti rinominare la tua sessione:ctrl-b $
nha

21
E Ctrl-b :new -s <name>per dare un nome alla nuova seduta.
Ain Tohvri

32

Come creare lo script

Questo script controllerà se esiste una sessione. Se la sessione non esiste, crea una nuova sessione e collegala. Se la sessione esiste non accade nulla e ci colleghiamo a quella sessione. Sentiti libero di sostituire "~ / development" con il nome del progetto.

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

Nuova sessione dal terminale

Creiamo due sessioni separate, le elenciamo, le colleghiamo a una e poi dall'interno di tmux passiamo in rassegna le sessioni.

tmux new -s name -dfunziona dall'interno di tmux perché stiamo creando una nuova sessione distaccata. Altrimenti riceverai un errore di nidificazione.

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

Nuova sessione da tmux

Ora siamo dentro o meglio conosciuti come attaccati alla nostra sessione target. Se proviamo a creare una nuova sessione mentre siamo collegati, si verificherà un errore di annidamento.

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

Per risolvere questo problema creiamo una nuova sessione distaccata. per esempio,

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

Sessioni di ciclo (scambio)

  • Prefix ( sessione precedente
  • Prefix ) prossima sessione

nota: Prefix è l' Ctrl-bimpostazione predefinita. Puoi collegarti Prefixa Ctrl-ae in Mac OSX puoi cambiare Caps Lock in ctrlsystem preferences > keyboard > modifier keys

Collegarsi a una sessione utilizzando la modalità di comando all'interno di tmux

Se si tenta di collegarsi a una sessione senza scollegarsi, verrà generato un errore.

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

Usa invece la modalità di comando, Prefix :quindi digita attach -t session_namee premi invio.


Grazie per la risposta molto completa, questo ha risposto ad alcune delle mie domande tutte in una volta!
mdekkers

24

Usare questo per me funziona:

TMUX= tmux new-session -d -s name
tmux switch-client -t name

La TMUX=prima riga è richiesta in modo che tmux non generi un sessions should be nested with care, unset $TMUX to forcemessaggio.


1
Funziona alla grande nel mio copione dopo aver cambiato la prima riga in:TMUX=`tmux new-session -d -s name`
Michael Robinson,

17

Tutti i comandi che puoi lanciare all'interno del tuo terminale, come tmux new -s sessionNamepossono essere lanciati dall'interno tmuxpremendo il tasto trigger (es ctrl-b:) :poi il comando senza la tmuxparte iniziale .

Di conseguenza, ctrl-b :seguito da new -s sessionNamefarà esattamente quello che vuoi e darà un nome alla tua sessione. Inoltre passa automaticamente alla nuova sessione.



7

su consiglio di user2354696 utilizzo le seguenti combinazioni di tasti per creare una nuova sessione o "clonare" una sessione esistente

bind-key N run-shell 'TMUX = tmux nuova-sessione -d \; switch-client -n '
bind-key C run-shell 'TMUX = tmux nuova-sessione -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; switch-client -n \; messaggio visualizzato "sessione #S clonata" "
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.