Я ищу решение ssh / tmux, которое будет действовать следующим образом:
В основном я хочу иметь возможность создавать новые сеансы на одном и том же сервере, очевидно, если существует более одного сеанса, к которому никто не подключен, он должен выбрать первый.
Это должно позволить мне использовать эту команду по умолчанию для ssh-соединений.
Мое текущее решение ssh -t 'tmux a || tmux || /bin/bash'
не работает должным образом, потому что, когда вы попытаетесь подключиться снова, он подключится к существующему сеансу, и в этом случае мне нужен новый.
Я не уверен, с какой версии, но теперь вы можете использовать
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
Сообщение OP немного сбивает с толку, но из исходного решения "tmux a || tmux || bash" я вычитал: прикрепить к существующему или создать новый =>
tmux ls | grep -v connected && tmux attach || tmux
Сделаю.
Я предпочитаю: «если существует неподключенный сеанс tmux, подключиться к нему, иначе оболочка» в .profile:
tmux ls | grep -v прикреплен && tmux attach