web-dev-qa-db-fra.com

Comment envoyer des commandes lors de l'ouverture d'une session tmux dans une autre session tmux?

Une situation typique peut être:

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

J'ouvre une session tmux, puis ssh dans un serveur et attache à une session tmux existante. À ce stade, j'ai une session tmux dans une autre. Comment envoyer des commandes à la session tmux interne?

Remarque: Les deux sessions tmux ont les mêmes liaisons de touches.

121
Kris

La commande send-prefix Peut être utilisée pour envoyer votre séquence de touches de préfixe (le processus s'exécutant dans) le volet actif. Par défaut, le préfixe est Cb et Cb est lié à send-prefix (De sorte que le frapper deux fois envoie un seul Cb à le volet actif). C'est exactement ce dont nous avons besoin pour accéder aux liaisons de l'instance interne tmux .

La première C-b est capturée par l'instance "externe" tmux comme clé de préfixe. La seconde est capturée par l'instance "externe" tmux et déclenche sa liaison Cb (send-prefix) . Cela envoie un C-b au volet actif de l'instance externe. Le processus en cours d'exécution dans ce volet est (en fin de compte, par le biais d'une instance ssh ) "intérieur" tmux instance. Il capture le C-b comme clé de préfixe. Maintenant, votre prochaine frappe sera passée à travers l'instance tmux externe et capturée par celle interne pour déclencher une liaison.

Pour déclencher la liaison c (new-window) Dans une instance de second niveau de tmux , vous devez taper Cb Cb c. Pour une instance de troisième niveau de tmux , vous devez taper C-b C-b C-b C-b c.

Ce doublement pour chaque niveau peut être gênant si vous avez souvent affaire à plusieurs couches de tmux . Si vous pouvez épargner une autre clé, vous pouvez créer une liaison non préfixée pour faciliter (éventuellement) la saisie:

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

Créer une nouvelle fenêtre au deuxième niveau tmux : C-\c
Créer une nouvelle fenêtre au troisième niveau tmux : C- ^ c (ou C -\C-\c)


Si vous avez un nombre limité de commandes tmux que vous souhaitez envoyer (facilement) au niveau inférieur tmux , vous pouvez utiliser à la place send-keys pour créer des liaisons spécifiques (éventuellement juste dans votre niveau supérieur tmux exemple):

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

Créer une nouvelle fenêtre au deuxième niveau tmux : C-b C-c
Créer une nouvelle fenêtre au troisième niveau tmux : C-b C

189
Chris Johnsen

Pour accéder à l'intérieur, maintenez le contrôle et appuyez deux fois sur B.

41
thouliha

MODIFIER:

Je ne [~ # ~] pas [~ # ~] recommande l'utilisation C-q comme clé de liaison, car il s'agit d'une commande de touche de contrôle par défaut pour

débloque l'écran et permet à l'écran de continuer

Une situation se produit ici , et @Paschalis fournit une solution:

s'il s'avère que c'est deux fois malchanceux (une session tmux distante avec C-q comme préfixe): Tapez Cltr-q, puis :, et entrez dans tmux: send-keys C-q

Ci-dessous, c'est la réponse:


Pour faire simple, ajoutez la ligne ci-dessous dans votre ~/.tmux.conf

bind-key -n C-q send-prefix

Ensuite, vous pouvez directement utiliser C-q comme clé de liaison pour votre tmux distant.

6
qun