9

Команда tmux attach действует больше как комбинация screen -r и screen -x - сначала она пытается присоединиться к самому последнему отключенному сеансу, а затем, если ни один не доступен, она присоединится к текущему присоединенному сеансу. Я хочу эмулировать поведение screen -R: сначала попытайтесь подключиться к отдельному сеансу, затем начните новый сеанс, если не было отключенных сеансов. Каков наилучший способ добиться этого в tmux?

5 ответов5

12

Посоветовавшись с мастерами IRC, я уверен, что ни одна команда tmux не имеет такого поведения. К счастью, это довольно легко эмулировать с помощью оболочки:

(tmux ls | grep -vq attached && tmux at) || tmux
3

Несмотря на то, что сказано в руководстве 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`

2

Я имею тенденцию проводить только две сессии tmux одновременно, поэтому я делаю что-то подобное в каждом окне терминала.

окно терминала 0:

tmux attach -t 0 || tmux new

окно терминала 1:

tmux attach -t 1 || tmux new
2

Это сработало лучше для меня:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-T необходим для прикрепления к соответствующему сеансу.

1

Как насчет

tmux attach || tmux new

или вместо этого просто создайте файл ~/.tmux.conf если он не существует, и добавьте

new-session

так, что он создает новый сеанс, когда его нет, когда вы запускаете tmux attach .

Также может быть удобно сделать tmux псевдонимом для подключения к tmux attach .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .