Створіть новий сеанс tmux зсередини сеансу tmux


105

Я пишу сценарій оболонки, який створює / приєднує або переключається на певний сеанс, залежно від того, чи є всередині tmux і чи існує сесія.

У мене все працює чудово, крім випадку, що вимагає створення нового сеансу tmux зсередини сесії tmux.

Коли мій сценарій виконується tmux new-session -s name, я отримую такий результат:

сеанси повинні бути вкладені обережно, скиньте $ TMUX для примушування

Я насправді не хочу вкладати сеанси, моя мета - створити ще один окремий сеанс і перейти на нього зсередини сеансу tmux .

Чи можливо це?


2
ВЕЛИКИЙ ресурс для користувачів, які знаходять це питання: leanpub.com/the-tao-of-tmux/read
— 0xSheepdog

Відповіді:


142

Найшвидший спосіб (якщо ви використовуєте ctrl-bяк свій префікс команди):

ctrl-b :new

Щоб створити новий сеанс, значить

ctrl-b s

щоб інтерактивно вибрати та долучити до сеансу.


5
+1 для рішення, яке не хвилює "сеанси слід вкладати обережно, не встановити $ TMUX, щоб змусити"
— Marcin Rogacki

3
а потім ви можете перейменувати сеанс:ctrl-b $
— Nha

21
І Ctrl-b :new -s <name>дати ім’я новій сесії.
— Ain Tohvri

32

Як створити сценарій

Цей скрипт перевірить, чи існує сеанс. Якщо сеансу не існує, створіть новий сеанс та приєднайте до нього. Якщо сеанс існує, нічого не відбувається, і ми приєднуємося до цього сеансу. Замініть `~ / development 'на ім'я проекту.

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

Нова сесія з терміналу

Створимо два відокремлених сеансу, перерахуємо їх, приєднаємо до одного, а потім із циклу tmux через сеанси.

tmux new -s name -dпрацює зсередини tmux, тому що ми створюємо новий окремий сеанс. Інакше ви отримаєте помилку введення.

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

Новий сеанс зсередини tmux

Зараз ми всередині або більш відомі як додані до нашої цільової сесії. Якщо ми спробуємо створити новий сеанс під час додавання, це призведе до помилки введення.

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

Для вирішення цього питання ми створюємо новий окремий сеанс. наприклад,

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

Цикл (перемикач) Сеанси

  • Prefix ( попередній сеанс
  • Prefix ) наступна сесія

Примітка: Prefix це Ctrl-bза замовчуванням. Ви можете прив'язати Prefixдо Ctrl-aMac OSX і ви можете змінити Caps Lock на ctrlsystem preferences > keyboard > modifier keys

Додайте до сеансу, використовуючи командний режим, перебуваючи всередині tmux

Спроба приєднатися до сеансу, не відриваючись, призведе до помилки.

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

Замість цього використовуйте командний режим, Prefix :після чого введіть attach -t session_nameта натисніть клавішу Enter.


Дякую за дуже повну відповідь, це відповіло на декілька моїх запитань відразу!
— mdekkers

24

Використання цього працює для мене:

TMUX= tmux new-session -d -s name
tmux switch-client -t name

TMUX=На першій лінії потрібно так tmux не пускає sessions should be nested with care, unset $TMUX to forceповідомлення.


1
Чудово працює за моїм сценарієм після зміни першого рядка на:TMUX=`tmux new-session -d -s name`
— Майкл Робінсон,

17

Усі команди, які ви можете запустити у своєму терміналі, як, наприклад, tmux new -s sessionNameможна запустити зсередини tmux, натиснувши кнопку тригера (наприклад ctrl-b:), :потім команду без початкової tmuxчастини.

Як результат, ctrl-b :далі new -s sessionNameбуде зроблено саме те, що ви хочете, і дасть ім’я своєму сеансу. Він також автоматично переключається на новий сеанс.



7

за порадою user2354696, я використовую наступні ключові прив’язки, щоб створити новий сеанс або "клонувати" існуючий сеанс

прив’язуючий ключ N run-shell 'TMUX = tmux new-session -d \; switch-client -n '
bind-ключ C run-shell 'TMUX = tmux new-session -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \; перемикач-клієнт -n \; дисплей-повідомлення "сеанс №S клонований" '
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.