Чи є еквівалент tmux "screen -D -R"


13

Мені хотілося б знати, чи є спосіб tmuxповодити себе screen -D -Rтак, як я можу сказати, мати команду як команду за замовчуванням у Putty.

Ці screenперемикачі змушують від'єднати існуючий екранний сеанс для мого користувача (навіть якщо він все ще був активним та увійшов у систему в іншому місці) та повторно приєднати його до поточної сесії. Крім того, у випадку, якщо б не існувало екранного сеансу, він створив би новий.

Мені подобається tmux і я бачу чіткі переваги над екраном, але існування цієї функції справді запечатує угоду.

tmux attach не здається створити нову сесію, якщо її немає.

Сторінка man для tmux говорить:

Якщо сервер не запущений, сеанс вкладення (attach) спробує запустити його; це не вдасться, якщо сеанси не створені у файлі конфігурації.

Що означає розділ жирним шрифтом? (Я не можу знайти приклад створення сеансу у файлі conf).


Зі сторінки чоловіка: " Файл конфігурації - це набір tmuxкоманд, які виконуються послідовно при першому запуску сервера. " - Ви насправді можете мати attachабо new-sessionяк рядок у вашому .tmux.conf.
sr_

@sr_ Що ж, коли перший сервер запустився, new-sessionце все одно відбулося б ...
Chris Down

Щойно знайшли це (закрите) запитання на SO. Те саме запитання з подібними відповідями. stackoverflow.com/q/3432536/168034
phunehehe

Відповіді:


15

Так:

$ tmux attach -d || tmux new

-dпотрібно поводити себе так screen -D, тобто відстороняти всіх інших.

Підключіться за допомогою ssh, а потім приєднати або створити може бути щось на кшталт:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box

1
Так - це здається найефективнішим способом досягти того, що я просив. Так само я не new-sessionсхвалюю конфігураційний файл у випадку, якщо ви хочете відредагувати його та перезавантажити під час сеансу tmux.
Geeb

4

Щоб tmux attachстворити новий сеанс, коли його немає, використовуйте параметр new-sessionу файлі конфігурації tmux. Створіть файл, ~/.tmux.confякщо він не існує, і додайте

new-session

йому. Крім того , я псевдонім tmuxдля tmux attach:)


1
Я вважаю за краще не мати new-sessionв ~/.tmux.confтому , що якщо я перезавантажити конфігурацію , використовуючи команду source-file ~/.tmux.conf(див це ) нова сесія буде запущена. Так, я можу це вбити, а потім приєднати до попереднього, але це трохи дратує.
ммоя

3

Ви можете емулювати це за допомогою функції оболонки, це повинно працювати для будь-якої оболонки, сумісної з POSIX:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

Тепер, якщо запустити його як tmux -z, він повинен виконувати дії, які ви шукаєте.


2

цей для мене працює трохи краще:

tmux new-session -AD -s <session-name>

1

Я вважаю, що це найкраще працює для мене .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi

Як це пояснює сміливий розділ в ОП?
Антон

0

Якщо ви використовуєте це всередині .shrc-файлу або подібного, execя б рекомендував

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.