Créer une nouvelle session tmux depuis une session tmux

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

Tout fonctionne très bien sauf pour la création d’une nouvelle session tmux dans une session tmux.

Lorsque mon script exécute le nom tmux new-session -s name , j’obtiens la sortie suivante:

les sessions devraient être nestedes avec soin, non définies $ TMUX pour forcer

Je ne veux pas réellement imbriquer des sessions, mon but est de créer une autre session distincte et d’y basculer depuis une session tmux .

Est-ce possible?

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

 ctrl-b :new 

Pour créer une nouvelle session,

 ctrl-b s 

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

Utiliser cela fonctionne pour moi:

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

Le TMUX= sur la première ligne est requirejs, donc tmux ne lance pas de sessions should be nested with care, unset $TMUX to force message.

Toutes les commandes que vous pouvez lancer dans votre terminal, comme tmux new -s sessionName peuvent être lancées depuis tmux en appuyant sur la touche sortinggger (ex: ctrl-b ) puis sur : la commande sans la partie tmux départ.

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

Comment créer le script

Ce script vérifiera 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 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 du terminal

Créons deux sessions détachées, listons-les, associons-les à un, puis à partir du cycle tmux à travers des sessions.

tmux new -s name -d fonctionne depuis l’intérieur de tmux car nous créons une nouvelle session détachée. Sinon, vous obtenez 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 sums maintenant ou mieux connus comme attachés à notre session cible. Si nous essayons de créer une nouvelle session en pièce jointe, 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) de sessions

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

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

Attacher à une session en utilisant le mode de commande à l’intérieur de tmux

Si vous essayez de vous connecter à une session sans détacher, cela entraînera une erreur.

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

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

Vous pouvez essayer en premier lieu unset TMUX , cela fonctionne pour moi.

sur le conseil de user2354696 j’utilise les raccourcis clavier suivants pour créer une nouvelle session ou “cloner” une session existante

 clé exécutable N-shell-shell 'TMUX = tmux new-session -d \;  switch-client -n '
 bind-key C run-shell 'TMUX = tmux nouvelle session -t $ (tmux display-message -p #S) -s $ (tmux display-message -p # S-clone) -d \;  commutateur-client -n \;  message-display "session #S cloné" '