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?
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.
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
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]
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édentePrefix
)
prochaine sessionnote:Prefix
est Ctrl-b
par 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
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.
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.
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.
Tu peux essayer unset TMUX
d'abord, cela fonctionne pour moi.
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é" '