Назад | Перейти на главную страницу

tmux прикрепить к существующим сеансам или создать новые

Я ищу решение ssh / tmux, которое будет действовать следующим образом:

В основном я хочу иметь возможность создавать новые сеансы на одном и том же сервере, очевидно, если существует более одного сеанса, к которому никто не подключен, он должен выбрать первый.

Это должно позволить мне использовать эту команду по умолчанию для ssh-соединений.

Мое текущее решение ssh -t 'tmux a || tmux || /bin/bash' не работает должным образом, потому что, когда вы попытаетесь подключиться снова, он подключится к существующему сеансу, и в этом случае мне нужен новый.

Я не уверен, с какой версии, но теперь вы можете использовать

tmux new -A -s <session-name>

Флаг -A заставляет новый сеанс вести себя как присоединенный сеанс, если имя сеанса уже существует

Это своего рода странный вариант использования, но все, что вам нужно сделать, это написать оболочку вокруг tmux (назовите ее mytmux или что-то в этом роде), что:

  1. звонки tmux ls и анализирует вывод, ища то, что не прикреплено
  2. присоединиться к первому неприсоединенному сеансу, -ИЛИ-
  3. создать сеанс, если свободных сеансов не найдено, и присоединиться к нему

Команда tmux ls должен вернуть что-то вроде этого, если есть сеансы:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)

где начальное поле ('0') - это имя сеанса, а последнее поле указывает, подключен ли к нему кто-нибудь. Итак, если бы никто не был привязан, это выглядело бы так:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34]

и если бы некоторые были прикреплены, а некоторые нет, вы бы получили:

<~> $ tmux ls
0: 1 windows (created Mon Sep 16 21:42:16 2013) [120x34] (attached)
1: 1 windows (created Mon Sep 16 21:43:30 2013) [120x34]

Если вы не нашли сеансов вообще или бесплатных сеансов, запустите tmux new создать его. Если вы найдете бесплатную сессию, запустите tmux attach -t 1 где «1» - название бесплатного сеанса.

Мне также нужна была функция «повторно использовать любой отдельный сеанс или создать один». Вот мой однострочник для этого (с треском провалится, если вы используете ":" в имени сеанса):

tmux attach -t $(tmux ls | grep -v attached | head -1 | cut -f1 -d:) || tmux

Сообщение OP немного сбивает с толку, но из исходного решения "tmux a || tmux || bash" я вычитал: прикрепить к существующему или создать новый =>

tmux ls | grep -v connected && tmux attach || tmux

Сделаю.

Я предпочитаю: «если существует неподключенный сеанс tmux, подключиться к нему, иначе оболочка» в .profile:

tmux ls | grep -v прикреплен && tmux attach