Есть ли tmux эквивалент «screen -D -R»

13

Я хотел бы знать, есть ли способ заставить tmuxсебя вести себя так, screen -D -Rчтобы я мог сказать, иметь команду в качестве команды по умолчанию в Putty.

Эти screenпереключатели будут принудительно отключать существующий сеанс экрана для моего пользователя (даже если он все еще был активен и вошел в систему где-то еще) и подключить его к текущему сеансу. Кроме того, в случае отсутствия сеанса экрана будет создан новый сеанс.

Мне нравится tmux, и я вижу явные преимущества перед экраном, но наличие этой функции действительно может заключить сделку.

tmux attach не создается новая сессия, если ее нет.

Страница man для tmux гласит:

Если сервер не запущен, attach-session (attach) попытается запустить его; это не удастся, если сеансы не будут созданы в файле конфигурации.

Что означает раздел, выделенный жирным шрифтом? (Я не могу найти пример создания сеанса в файле conf).

Geeb
источник
От человека странице: « Файл конфигурации представляет собой набор tmuxкоманд , которые выполняются в последовательности , когда сервер запускается в первый раз. » - вы могли бы на самом деле есть , attachили new-sessionв виде линии в вашей .tmux.conf.
sr_
@sr_ Ну, тогда, когда сервер был запущен впервые, все new-sessionравно бы это случилось ...
Крис Даун
Только что нашел этот (закрытый) вопрос по 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
mmoya
источник
1
Да, кажется, это самый эффективный способ добиться того, что я просил. Аналогично, я не new-sessionодобряю конфигурационный файл на тот случай, если вы захотите отредактировать его и перезагрузить во время сеанса tmux.
Geeb
4

Чтобы tmux attachсоздать новый сеанс, когда его нет, используйте опцию new-sessionв файле конфигурации tmux. Создайте файл, ~/.tmux.confесли он не существует, и добавьте

new-session

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

phunehehe
источник
1
Я предпочитаю не иметь new-sessionв ~/.tmux.confпотому , что если я перезагрузить конфигурацию , используя команду source-file ~/.tmux.conf(см это ) новая сессия будет запущена. Да, я могу убить его, а затем присоединить к предыдущему, но это немного раздражает.
Mmoya
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>
ZA
источник
1

Я считаю, что это лучше всего работает для меня на .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi
user2451432
источник
Как это объясняет жирный раздел в ОП?
Энтон
0

Если вы используете это в файле .shrc или аналогичном, execя бы порекомендовал

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Аарон Дж Ланг
источник