2013-05-06 2 views
59

Ich schreibe ein Shell-Skript, das/attaches erstellt oder zu einer bestimmten Sitzung wechselt, je nachdem, ob man sich in tmux befindet und die Sitzung existiert.Neue tmux-Sitzung innerhalb einer tmux-Sitzung erstellen

Ich habe alles funktioniert großartig, außer für den Fall, der die Erstellung einer neuen tmux-Sitzung innerhalb einer tmux-Sitzung erfordert.

Wenn mein Skript tmux new-session -s name ausführt, ich folgende Ausgabe:

Sitzungen sollten mit Vorsicht, ungesetzt $ TMUX verschachtelt werden Sitzungen zu zwingen

ich eigentlich gar nicht wollen Nest, Mein Ziel ist es, eine andere separate Sitzung erstellen und wechseln Sie innerhalb einer tmux-Sitzung.

Ist das möglich?

Antwort

87

Der schnellste Weg (vorausgesetzt, Sie ctrl-b als Befehl Präfix) ist:

ctrl-b :new 

eine neue Sitzung zu erstellen, dann

ctrl-b s 

interaktiv an die Sitzung auswählen und befestigen.

+4

+1 für Lösung, die nicht interessiert" Sitzungen sollten sorgfältig verschachtelt werden, unset $ TMUX, um " –

+2

" zu erzwingen und dann können Sie Ihre Sitzung umbenennen: 'ctrl-b $' – nha

+7

Und 'Ctrl-b: new -s ', um der neuen Sitzung einen Namen zu geben. –

18

diese Verwendung funktioniert für mich:

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

Die TMUX= in der ersten Zeile erforderlich ist, so tmux keine sessions should be nested with care, unset $TMUX to force Nachricht wirft.

+1

Funktioniert gut in meinem Skript nach dem Ändern der ersten Zeile zu: 'TMUX = \' tmux neue-session -d -s Name \ " –

4

Sie können zuerst versuchen unset TMUX, das funktioniert für mich.

11

Alle Befehle können Sie in Ihrem Terminal starten, wie tmux new -s sessionName kann innerhalb tmux durch Drücken der Auslösetaste gestartet werden (zB: ctrl-b) dann : dann den Befehl ohne die Start tmux Teil.

Als Ergebnis ctrl-b : gefolgt von new -s sessionName tun genau das, was Sie wollen und geben Sie Ihrer Sitzung einen Namen. Es wird automatisch auf die neue Sitzung umgeschaltet.

4

auf Rat der user2354696 Ich verwende folgende Tastenbelegungen eine neue Sitzung oder „Klon“ eine bestehende Sitzung

 
bind-key N run-shell 'TMUX= tmux new-session -d \; switch-client -n' 
bind-key C run-shell 'TMUX= tmux new-session -t $(tmux display-message -p #S) -s $(tmux display-message -p #S-clone) -d \; switch-client -n \; display-message "session #S cloned"' 
8

erstellen Wie das Skript

Dieses Skript erstellt werden überprüfen, ob eine Sitzung vorhanden ist. Wenn die Sitzung nicht existiert, erstellen Sie eine neue Sitzung und hängen Sie sie an. Wenn eine Sitzung existiert, passiert nichts und wir hängen an diese Sitzung an. Fühlen Sie sich frei, `~/development 'durch den Projektnamen zu ersetzen.

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

# ~/development 

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

Neue Sitzung vom Terminal

Lassen Sie uns zwei freistehende Sitzungen erstellen, sie aufzulisten, einem anhängen und dann von innen tmux Zyklus durch Sitzungen.

tmux new -s name -d funktioniert von innerhalb von tmux, weil wir eine neue getrennte Sitzung erstellen. Andernfalls erhalten Sie einen Verschachtelungsfehler.

$ 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] 

Neue Sitzung innerhalb tmux

Wir sind nun innerhalb oder besser bekannt als unserer Zielsitzung angebracht. Wenn wir versuchen, beim Anhängen eine neue Sitzung zu erstellen, führt dies zu einem Verschachtelungsfehler.

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

Um dies zu lösen, erstellen wir eine neue getrennte Sitzung. z.B.

$ 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] 

Zyklus (Schalter) Sessions

  • Prefix(vorherige Sitzung
  • Prefix)nächste Sitzung

Anmerkung:Prefix ist standardmäßig Ctrl-b. Sie können Prefix-Ctrl-a und in Mac OSX binden können Sie Caps Lock ändern system preferences > keyboard > modifier keys

zu einer Sitzung ctrl Attach Befehl Modus, während im Inneren tmux

zu einer Sitzung befestigen Der Versuch, ohne zu einem Fehler führt zu lösen.

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

Statt Befehlsmodus Prefix: dann attach -t session_name Typ verwenden und drücken Sie die Eingabetaste.