10 votes

L'équivalent tmux de "screen -R" ?

El tmux attach agit plutôt comme une combinaison de screen -r y screen -x -- d'abord il essaie de s'attacher à la plus récente détaché et, si aucune session n'est disponible, il s'attachera à une session déjà attachée. Je veux émuler le comportement de screen -R : on essaie d'abord de s'attacher à une session détachée, puis de démarrer une nouvelle session s'il n'y en a pas. Quelle est la meilleure façon de réaliser cela dans tmux ?

13voto

Drew Frank Points 353

Après avoir consulté les magiciens de l'IRC, je suis sûr qu'il n'y a pas une seule commande tmux qui a ce comportement. Heureusement, il est assez facile à émuler en utilisant le Shell :

(tmux ls | grep -vq attached && tmux at) || tmux

0 votes

Modification mineure pour supprimer le message "failed to connect to server : Connection refused" dans le cas où vous lancez une nouvelle session : (tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux

3voto

user1559834 Points 131

Malgré ce qui est dit dans le manuel de 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 celle-ci :

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

Une autre approche consisterait à sélectionner manuellement une session non rattachée :

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

0 votes

Bonne prise ! La documentation n'est pas en phase avec le comportement réel. J'ai créé un rapport de bogue pour ça.

0 votes

Un correctif a été publié pour corriger ce problème, de sorte que la prochaine version devrait se comporter comme prévu.

0 votes

Le patch est dans la 1.8 ?

3voto

Charles Witt Points 31

J'ai tendance à n'avoir que deux sessions tmux à la fois, donc je fais quelque chose comme ceci 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

2voto

MikeRand Points 1253

C'est ce qui a le mieux fonctionné 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 s'attacher à la bonne session.

1voto

Tamara Wijsman Points 56163

Qu'en est-il

tmux attach || tmux new

ou au lieu de cela, créez simplement le fichier ~/.tmux.conf s'il n'existe pas, et ajoutez

new-session

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

Il pourrait aussi être pratique de faire tmux un alias pour tmux attach .

0 votes

La première proposition attacherait aux sessions tmux actuellement attachées (similaire à screen -x), ce qui est quelque chose que je veux éviter. La deuxième proposition présente le 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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X