équivalent tmux de «screen -R»?

10

La tmux attachcommande agit plus comme une combinaison de screen -ret screen -x- elle essaie d'abord de se joindre à la session la plus récemment détachée , puis si aucune n'est disponible, elle se joindra à une session actuellement connectée. Je veux émuler le comportement de screen -R: essayez d'abord de vous attacher à une session détachée, puis démarrez une nouvelle session s'il n'y a pas de sessions détachées. Quelle est la meilleure façon d'y parvenir dans tmux?

Drew Frank
la source

Réponses:

12

Après avoir consulté les assistants d'IRC, je suis convaincu qu'aucune commande tmux n'a ce comportement. Heureusement, il est assez facile d'émuler en utilisant le shell:

(tmux ls | grep -vq attached && tmux at) || tmux
Drew Frank
la source
Modification mineure pour écraser le « Echec de connexion au serveur: Connexion refusée » sortie dans le cas où vous lancez une nouvelle session:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite
3

Malgré ce qu'il dit dans le manuel 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.

La réponse de Drew ne fonctionnera pas correctement dans une situation comme:

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 ats'attachera à la dernière session (# 1) (même si cette session est toujours attachée ailleurs). Cela ruine l'idée de lancer plusieurs sessions tmux et de ne les attacher qu'à une seule session (pour utiliser mosh + tmux + iterm2 pour créer un terminal itinérant parfait).

Une autre approche serait de sélectionner manuellement une session non attachée:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`

user1559834
la source
Bonne prise! La documentation n'est pas synchronisée avec le comportement réel. J'ai créé un rapport de bogue pour cela.
Drew Frank
Un correctif est sorti qui corrige cela, donc dans la prochaine version, il devrait se comporter comme annoncé.
Drew Frank
Le patch est-il en 1.8?
momeara
2

J'ai tendance à n'avoir que deux sessions tmux à la fois, donc je fais quelque chose comme ça dans chaque fenêtre de terminal.

fenêtre de terminal 0:

tmux attach -t 0 || tmux new

fenêtre de terminal 1:

tmux attach -t 1 || tmux new
Charles Witt
la source
2

Cela a fonctionné le mieux pour moi:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

Le -t est nécessaire pour attacher à la session appropriée.

tomberek
la source
1

Qu'en est-il de

tmux attach || tmux new

ou créez simplement le fichier ~/.tmux.confs'il n'existe pas et ajoutez

new-session

pour qu'il crée une nouvelle session lorsqu'il n'y en a pas lorsque vous exécutez tmux attach.

Il peut également être utile de créer tmuxun alias tmux attach.

Tamara Wijsman
la source
La première proposition serait attachée aux sessions tmux actuellement attachées (similaire à screen -x), ce que je veux éviter. La deuxième proposition présente ce même problème et a également la conséquence indésirable de créer des sessions tmux "supplémentaires" lorsque j'utilise la commande tmux source-file pour recharger la configuration.
Drew Frank