Existe-t-il un équivalent tmux de «screen -D -R»

13

Je voudrais savoir s'il existe un moyen de se tmuxcomporter comme screen -D -Rje pourrais dire, avoir la commande comme commande par défaut dans Putty.

Ces screencommutateurs forceraient le détachement d'une session d'écran existante pour mon utilisateur (même si elle était encore active et connectée ailleurs) et la rattacheraient à la session en cours. De plus, dans le cas où aucune session d'écran n'existerait, elle en créerait une nouvelle.

J'aime tmux et je peux voir des avantages clairs sur l'écran, mais l'existence de cette fonctionnalité scellerait vraiment l'affaire.

tmux attach ne semble pas créer une nouvelle session s'il n'y en a pas.

La page de manuel de tmux indique:

Si aucun serveur n'est démarré, attach-session (attach) tentera de le démarrer; cela échouera à moins que des sessions ne soient créées dans le fichier de configuration.

Que signifie la section en gras? (Je ne trouve pas d'exemple de création de session dans le fichier conf).

Geeb
la source
Depuis la page de manuel: " Le fichier de configuration est un ensemble de tmuxcommandes qui sont exécutées en séquence lors du premier démarrage du serveur. " - vous pourriez en fait avoir attachou new-sessionune ligne dans votre .tmux.conf.
sr_
@sr_ Eh bien, le moment où le serveur est démarré pour la première fois new-sessionserait arrivé de toute façon ...
Chris Down
Je viens de trouver cette question (fermée) sur SO. Même question avec des réponses similaires. stackoverflow.com/q/3432536/168034
phunehehe

Réponses:

15

Oui:

$ tmux attach -d || tmux new

-dest nécessaire de se comporter comme screen -D, c'est-à-dire de détacher tout le monde.

Connectez-vous par ssh, puis attacher ou créer pourrait être quelque chose comme:

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

$ stmux my.remote.box
mmoya
la source
1
Oui - cela semble être le moyen le plus efficace d'atteindre ce que j'ai demandé. De même, je désapprouve new-sessionle fichier de configuration au cas où vous souhaiteriez le modifier et le recharger pendant une session tmux.
Geeb
4

Pour tmux attachcréer une nouvelle session quand il n'y en a pas, utilisez l'option new-sessiondans le fichier de configuration tmux. Créez le fichier ~/.tmux.confs'il n'existe pas et ajoutez

new-session

à elle. De plus, je alias tmuxà tmux attach:)

phunehehe
la source
1
Je préfère ne pas avoir new-sessionà ~/.tmux.confparce que si je recharger la configuration en utilisant la commande source-file ~/.tmux.conf(voir ce ) sera lancé une nouvelle session. Oui, je peux le tuer et ensuite attacher à la précédente mais c'est un peu ennuyeux.
mmoya
3

Vous pouvez émuler ceci avec une fonction shell, cela devrait fonctionner pour tout shell compatible 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
}

Maintenant, si vous le lancez en tant que tmux -z, il devrait effectuer les actions que vous recherchez.

Chris Down
la source
2

celui-ci fonctionne un peu mieux pour moi:

tmux new-session -AD -s <session-name>
ZA
la source
1

Je trouve que cela fonctionne le mieux pour moi sur .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi
user2451432
la source
Comment cela explique-t-il la section en gras du PO?
Anthon
0

Si vous l'utilisez dans un fichier .shrc ou similaire avec execje recommanderais

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Aaron J Lang
la source