128 votes

Créer une nouvelle session tmux à partir d'une session tmux.

J'écris un shell script qui crée / attache ou bascule vers une session donnée, selon que l'on se trouve dans tmux et que la session existe.

Tout fonctionne parfaitement, sauf dans le cas où il faut créer une nouvelle session tmux à partir d'une session tmux.

Quand mon script s'exécute tmux new-session -s name j'obtiens le résultat suivant :

les sessions doivent être imbriquées avec précaution, désactivez $TMUX pour forcer

Je ne veux pas vraiment nicher des sessions, mon but est de créer une autre session séparée et y passer à partir d'une session tmux .

Est-ce possible ?

191voto

Hank Brekke Points 201

Le moyen le plus rapide (en supposant que vous utilisez ctrl-b comme préfixe de votre commande) est :

ctrl-b :new

Pour créer une nouvelle session, puis

ctrl-b s

pour sélectionner et attacher interactivement à la session.

42voto

Yonk Points 431

Comment créer le script

Ce script va vérifier si une session existe. Si la session n'existe pas, il crée une nouvelle session et s'y attache. Si la session existe, rien ne se passe et nous nous attachons à cette session. N'hésitez pas à remplacer `~/development' par le nom du projet.

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

Nouvelle session à partir du terminal

Créons deux sessions détachées, listons-les, attachons nous à l'une d'entre elles et ensuite, à partir de tmux, faisons le tour des sessions.

tmux new -s name -d fonctionne depuis l'intérieur de tmux parce que nous créons une nouvelle session détachée. Sinon, vous obtiendrez une erreur d'imbrication.

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

Nouvelle session à partir de tmux

Nous sommes maintenant à l'intérieur ou mieux connu comme ci-joint à notre session cible. Si nous essayons de créer une nouvelle session alors que nous sommes attachés, une erreur d'imbrication se produira.

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

Pour résoudre ce problème, nous créons une nouvelle session détachée, par exemple,

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

Cycle (interrupteur) Sessions

  • Prefix ( session précédente
  • Prefix ) session suivante

note : Prefix es Ctrl-b par défaut. Vous pouvez lier Prefix a Ctrl-a et dans Mac OSX, vous pouvez changer le verrouillage des majuscules en ctrl. system preferences > keyboard > modifier keys

S'attacher à une session en utilisant le mode commande à l'intérieur de tmux

Si vous essayez de vous attacher à une session sans la détacher, vous obtiendrez une erreur.

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

Utilisez plutôt le mode commande Prefix : puis tapez attach -t session_name et appuyez sur la touche Entrée.

25voto

Utiliser ceci fonctionne pour moi :

TMUX= tmux new-session -d -s name
tmux switch-client -t name

Le site TMUX= sur la première ligne est nécessaire pour que tmux ne jette pas un sessions should be nested with care, unset $TMUX to force message.

18voto

Morlock Points 1200

Toutes les commandes que vous pouvez lancer dans votre terminal, comme tmux new -s sessionName peut être lancé à partir de tmux en appuyant sur la touche de déclenchement (ex : ctrl-b ) alors : puis la commande sans le début tmux partie.

En conséquence, ctrl-b : suivi par new -s sessionName fera exactement ce que vous voulez et donnera un nom à votre session. Il passe également automatiquement à la nouvelle session.

15voto

Xiao Hanyu Points 131

Vous pouvez essayer unset TMUX d'abord, ça marche pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X