Команда tmux attach
действует больше как комбинация screen -r
и screen -x
- сначала она пытается присоединиться к самому последнему отключенному сеансу, а затем, если ни один не доступен, она присоединится к текущему присоединенному сеансу. Я хочу эмулировать поведение screen -R
: сначала попытайтесь подключиться к отдельному сеансу, затем начните новый сеанс, если не было отключенных сеансов. Каков наилучший способ добиться этого в tmux?
5 ответов
Посоветовавшись с мастерами IRC, я уверен, что ни одна команда tmux не имеет такого поведения. К счастью, это довольно легко эмулировать с помощью оболочки:
(tmux ls | grep -vq attached && tmux at) || tmux
Несмотря на то, что сказано в руководстве tmux:
The target-session rules for attach-session are slightly
adjusted: if tmux needs to select the most recently used session,
it will prefer the most recently used unattached session.
Ответ Дрю не будет работать должным образом в такой ситуации:
0: 1 windows (created Wed Nov 7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov 7 23:51:33 2012) [177x47] (attached)
tmux at
желанию подключится к последнему сеансу (# 1) (даже если этот сеанс все еще подключен где-то еще). Это разрушает саму идею запуска нескольких сеансов tmux и присоединения только к отдельному (использовать mosh + tmux + iterm2 для создания идеального роумингового терминала).
Другой подход заключается в том, чтобы вручную выбрать неприкрепленный сеанс:
tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`
Я имею тенденцию проводить только две сессии tmux одновременно, поэтому я делаю что-то подобное в каждом окне терминала.
окно терминала 0:
tmux attach -t 0 || tmux new
окно терминала 1:
tmux attach -t 1 || tmux new
Это сработало лучше для меня:
if [ -z "$TMUX" ]; then
(tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi
-T необходим для прикрепления к соответствующему сеансу.
Как насчет
tmux attach || tmux new
или вместо этого просто создайте файл ~/.tmux.conf
если он не существует, и добавьте
new-session
так, что он создает новый сеанс, когда его нет, когда вы запускаете tmux attach
.
Также может быть удобно сделать tmux
псевдонимом для подключения к tmux attach
.