2013-05-06 6 views
59

Я пишу сценарий оболочки, который создает/присоединяет или переключается на заданный сеанс, в зависимости от того, существует ли внутри tmux и существует сессия.Создайте новый сеанс tmux изнутри сеанса tmux

У меня все работает отлично, за исключением случая, требующего создания нового сеанса tmux из сеанса tmux.

Когда мой сценарий выполняет tmux new-session -s name, я получаю следующий результат:

сессия должна быть вложена с осторожностью, снят с охраной $ TMUX заставить

Я на самом деле не хочу гнездовые сессии, моя цель - создать еще один отдельный сеанс и переключиться на него из сеанса tmux.

Возможно ли это?

ответ

87

Самый быстрый способ (если вы используете ctrl-b в качестве префикса команды) является:

ctrl-b :new 

Чтобы создать новую сессию, то

ctrl-b s 

интерактивно выбрать и прикрепить к сессии.

+4

+1 для решения, которое не заботится о «сеансах, должно быть вложено с осторожностью, unset $ TMUX, чтобы заставить " –

+2

, а затем вы можете переименовать свою сессию:' ctrl-b $ ' – nha

+7

И' Ctrl-b: new -s ', чтобы дать имя новому сеансу. –

18

Используя это работает для меня:

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

TMUX= на первой линии требуется так tmux не бросает sessions should be nested with care, unset $TMUX to force сообщение.

+1

Работает отлично в моем скрипте после изменения первой строки на: 'TMUX = \' tmux new-session -d -s name \ '' –

4

Сначала вы можете попробовать unset TMUX, это работает для меня.

11

Все команды, которые вы можете запустить в терминале, как tmux new -s sessionName можно запустить из tmux, нажав клавишу включения (например: ctrl-b), то : затем команду без стартового tmux части.

В результате ctrl-b :, а затем new -s sessionName сделают именно то, что вы хотите, и укажите имя вашей сессии. Он также автоматически переключается на новый сеанс.

4

по совету user2354696, я использую следующую клавиш для создания нового сеанса или «клон» существующий сеанс

 
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

Как создать сценарий

Этот скрипт будет проверять, если сеанс не существует. Если сеанс не существует, создайте новый сеанс и присоедините его. Если сеанс действительно существует, ничего не происходит, и мы присоединяемся к этому сеансу. Не забудьте заменить `~/development 'на имя проекта.

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

# ~/development 

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

Новая сессия от терминала

Давайте создадим две отдельные сессии, перечислите их, прикрепить к одному, а затем из tmux цикла через сессий.

tmux new -s name -d работает изнутри tmux, потому что мы создаем новую отдельную сессию. В противном случае вы получите ошибку вложенности.

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

Новая сессия изнутри tmux

Мы сейчас внутри или более известный как прилагается к нашей целевой сессии. Если мы попытаемся создать новый сеанс при подключении, это приведет к ошибке вложенности.

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

Для решения этой проблемы мы создаем новый отдельный сеанс. например,

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

цикла (переключатель) Сессии

  • Prefix(предыдущая сессия
  • Prefix)следующая сессия

примечание:Prefix по умолчанию Ctrl-b. Вы можете связать Prefix с Ctrl-a и в Mac OSX вы можете изменить Caps Lock чтрл system preferences > keyboard > modifier keys

Присоединить к сеансу с помощью командного режима в то время как внутри tmux

Попытка присоединить к сеансу без отсоединения приведет к ошибке.

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

Вместо этого используйте режим командной Prefix: введите attach -t session_name и нажмите клавишу ВВОД.

Смежные вопросы