tmux присоединяется к существующим сессиям или создает новые
Я ищу решение ssh / tmux, которое будет действовать следующим образом:
- если сеанса нет, создайте его
- если есть сеанс и никто к нему не подключен, создайте другой
Главным образом я хочу иметь возможность создавать новые сеансы на одном сервере, очевидно, если существует более одного сеанса, к которому никто не подключен, он должен выбрать первый.
Это должно позволить мне поместить это как команду по умолчанию для соединений ssh.
Мое текущее решение ssh -t 'tmux a || tmux || /bin/bash'
не работает должным образом, потому что при повторной попытке подключения он подключится к существующему сеансу, и в этом случае я хочу новый.
3 ответа
Я не уверен, с какой версией, но теперь вы можете использовать
tmux new -A -s <session-name>
Флаг -A заставляет новый сеанс вести себя как присоединенный сеанс, если имя сеанса уже существует
Это своего рода странный сценарий использования, но вам нужно написать обертку вокруг tmux (назовите ее mytmux
или что-то) что:
- звонки
tmux ls
и анализирует вывод, ища что-то, что не прикреплено - прикрепить к первому не присоединенному сеансу, -ИЛИ-
- создать сеанс, если свободных сеансов не найдено, и прикрепить к нему
Команда 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
Сообщение ОП немного сбивает с толку, но из оригинального решения "tmux a || tmux || bash" я вычитаю: присоединить к существующему или создать новое =>
tmux ls | grep -v прикреплен && tmux прикреплен || tmux
Сделаю.
Я предпочитаю: "если неподключенный сеанс tmux существует, подключитесь к нему, иначе shell" в.profile:
tmux ls | grep -v присоединен && tmux присоединен