web-dev-qa-db-fra.com

Créer une nouvelle session tmux depuis une session tmux

J'écris un script Shell qui crée/attache ou bascule vers une session donnée, selon qu'il s'agit ou non de tmux et que la session existe.

J'ai tout fonctionne très bien sauf le cas nécessitant la création d'une nouvelle session tmux à partir d'une session tmux.

Quand mon script exécute tmux new-session -s name, Je reçois le résultat suivant:

les sessions doivent être imbriquées avec soin, non défini $ TMUX pour forcer

Je ne veux pas réellement imbriquer de sessions, mon objectif est de créer une autre session séparée et y basculer depuis une session tmux.

Est-ce possible?

87

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

ctrl-b :new

Pour créer une nouvelle session, puis

ctrl-b s

pour sélectionner et attacher de manière interactive à la session.

117
msharp

Comment créer le script

Ce script va vérifier si une session existe. Si la session n'existe pas, créez une nouvelle session et associez-la. Si la session existe, rien ne se passe et nous nous attachons à cette session. N'hésitez pas à remplacer "~/développement" 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 du terminal

Créons deux sessions isolées, listons-les, attachons-les à une, puis parcourez tmux en suivant les sessions.

tmux new -s name -d fonctionne depuis tmux car 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 depuis tmux

Nous sommes maintenant à l'intérieur ou mieux connu sous le nom attaché à notre session cible. Si nous essayons de créer une nouvelle session alors qu’elle est attachée, cela entraînera une erreur d’imbrication.

$ 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 (changer) Sessions

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

note:Prefix est Ctrl-bpar défaut. Vous pouvez lier Prefix à Ctrl-a et sous Mac OSX, vous pouvez modifier le verrouillage des majuscules en ctrl system preferences > keyboard > modifier keys

Se connecter à une session à l'aide du mode commande à l'intérieur de tmux

Si vous essayez de vous connecter à une session sans vous 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 de commande Prefix: puis tapez attach -t session_name et appuyez sur Entrée.

26
Yonk

En utilisant cela fonctionne pour moi:

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

Le 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.

22
user2354696

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 (par exemple: ctrl-b) puis : puis la commande sans la partie de départ tmux.

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

15
Morlock

Tu peux essayer unset TMUX d'abord, cela fonctionne pour moi.

7
Xiao Hanyu

au conseil de user2354696, j'utilise les raccourcis clavier suivants pour créer une nouvelle session ou "cloner" une session existante

 bind-key N TMUX de run-Shell = tmux new-session -d \; switch-client -n '
 clé-de-bind C run-Shell' TMUX = tmux nouvelle-session -t $ (message d'affichage tmux -p #S) -s $ (message d'affichage tmux -p #S -clone) -d \; switch-client -n \; message d'affichage "session #S cloné" '
5
user1384039