2013-05-06 24 views
59

Piszę skrypt powłoki, który tworzy/załącza lub przełącza do danej sesji, w zależności od tego, czy jest się wewnątrz tmux, czy sesja istnieje.Utwórz nową sesję tmux z sesji tmux

Mam wszystko działa świetnie, z wyjątkiem przypadku wymagającego utworzenia nowej sesji tmux z sesji tmux.

Kiedy mój skrypt wykonuje tmux new-session -s name, pojawia się następujący komunikat:

sesje powinny być zagnieżdżone z opieki, rozbrojony $ tmux zmusić

ja właściwie nie chcą sesji gniazdo, moim celem jest stworzyć kolejną oddzielną sesję i przejść do niej z poziomu sesji tmux.

Czy to możliwe?

Odpowiedz

87

Najszybszy sposób (zakładając że używasz ctrl-b jako przedrostek komend) jest:

ctrl-b :new 

Aby utworzyć nową sesję, a następnie

ctrl-b s 

interaktywnie wybrać i dołączyć do sesji.

+4

+1 dla rozwiązania, które nie dba o "sesje powinny być zagnieżdżone z ostrożnością, unset $ TMUX, aby wymusić " –

+2

, a następnie możesz zmienić nazwę sesji:' ctrl-b $ ' – nha

+7

I' Ctrl-b: new -s ', aby nadać nazwę nowej sesji. –

18

Korzystanie działa to dla mnie:

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

TMUX= na pierwszej linii jest wymagana tak tmux nie rzucać wiadomość sessions should be nested with care, unset $TMUX to force.

+1

Działa doskonale w moim skrypcie po zmianie pierwszego wiersza na: 'TMUX = \' tmux nowa-sesja -d -s nazwa \ '' –

4

Możesz spróbować najpierw unset TMUX, to działa dla mnie.

11

Wszystkie polecenia można uruchomić w swoim terminalu, jak tmux new -s sessionName można uruchomić z poziomu tmux przez naciśnięcie przycisku wyzwalającego (np ctrl-b) następnie : następnie polecenie bez wyjściowego tmux części.

W rezultacie ctrl-b :, a następnie new -s sessionName zrobi dokładnie to, co chcesz i poda nazwę sesji. Przełącza się również automatycznie na nową sesję.

4

na poradę user2354696 za I używać następujących klawiszy, aby utworzyć nową sesję lub „klon” istniejącej sesji

 
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

Jak stworzyć skrypt

Skrypt sprawdzi, czy sesja istnieje. Jeśli sesja nie istnieje, utwórz nową sesję i dołącz do niej. Jeśli sesja nie istnieje, nic się nie dzieje i dołączamy do tej sesji. Możesz zastąpić `~/development 'nazwą projektu.

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

# ~/development 

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

nowej sesji z terminala

Stwórzmy dwie sesje jednorodzinnych, wymienić je, dołącz do jednego a następnie od wewnątrz tmux przechodzić sesji.

tmux new -s name -d działa od wewnątrz tmux, ponieważ tworzymy nową oddzielną sesję. W przeciwnym razie pojawi się błąd zagnieżdżenia.

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

Nowa sesja od wewnątrz tmux

Jesteśmy teraz wewnątrz lub lepiej znany jako dołączony do naszej sesji docelowej. Jeśli spróbujemy utworzyć nową sesję podczas dołączania, spowoduje to błąd zagnieżdżenia.

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

Aby rozwiązać ten problem, tworzymy nową oddzielną sesję. np

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

cyklu (przełącznik) Sesje

  • Prefix(poprzedniej sesji
  • Prefix)obok sesji

uwaga:Prefix to domyślnie Ctrl-b. Można powiązać Prefix do Ctrl-a w systemie Mac OS X można zmienić Caps Lock ctrl system preferences > keyboard > modifier keys

Dołączanie do sesji w trybie polecenia natomiast wewnątrz tmux

Próbuje dołączyć do sesji bez odłączania spowoduje wystąpienie błędu.

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

Zamiast korzystać z trybu poleceń Prefix: następnie wpisz attach -t session_name i nacisnąć enter.

Powiązane problemy