tmux еквівалент "екран -R"?


10

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

Відповіді:


12

Після консультацій з майстрами IRC я ​​впевнений, що немає жодної команди tmux, яка б мала цю поведінку. На щастя, емуляцію за допомогою оболонки досить легко:

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

Невелика редакція, щоб вимкнути вихід "не вдалося підключитися до сервера: з'єднання відмовлено" у випадку, якщо ви запускаєте новий сеанс:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite

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`


Гарний улов! Документація не синхронізована з реальною поведінкою. Я створив для цього звіт про помилки .
Дрю Френк

Виправлено це виправлення, тож до наступного випуску він повинен вести себе як рекламується.
Дрю Френк

Чи патч у 1,8?
momeara

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.


Перша пропозиція додасться до доданих до цього часу сесій tmux (схожих на screen -x), чого я хочу уникати. Друга пропозиція виявляє цю саму проблему, а також має небажаний наслідок створення "зайвих" сесій tmux, коли я використовую команду tmux source-file для перезавантаження конфігурації.
Дрю Френк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.