Подтвердить что ты не робот

Создайте новый сеанс tmux изнутри сеанса tmux

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

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

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

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

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

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

4b9b3361

Ответ 1

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

ctrl-b :new

Чтобы создать новый сеанс,

ctrl-b s

для интерактивного выбора и присоединения к сеансу.

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Как создать script

Этот script будет проверять, существует ли сеанс. Если сеанс не существует, создайте новый сеанс и присоедините его. Если сеанс действительно существует, ничего не происходит, и мы присоединяемся к этому сеансу. Не забудьте заменить `~/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 на ctrl 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 и нажмите enter.

Ответ 5

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

Ответ 6

в 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"'