Je voudrais écrire un script pour ouvrir plusieurs programmes (serveurs) simultanément dans des terminaux séparés - peu importe lequel - et assigner différentes commandes à différents terminaux avec des commandes «atterrissant» dans le bon terminal. Est-ce possible?
Peut-être quelque chose comme ça:
- terminal ouvert1
- ouvrir terminal2 // simultanément avec 1.
- command1 // s'exécute dans le terminal1 sans ouvrir une nouvelle fenêtre de terminal
- command2 // s'exécute dans le terminal2 sans ouvrir une nouvelle fenêtre de terminal
- ...
Puis-je en quelque sorte étiqueter les fenêtres du terminal pour que les commandes soient exécutées dans le bon terminal?
J'aimerais également regarder tous les terminaux pendant que leurs programmes sont en cours d'exécution - mes programmes ont un argument pour imprimer la trace / débogage sur le terminal. J'aimerais donc voir quels messages sont échangés entre eux.
REMARQUE: je suis moins préoccupé par la sécurité des données échangées car ce script devrait servir de "simulation". J'ai configuré chaque serveur pour qu'il s'exécute à partir d'un port alloué sur localhost.
la source
Réponses:
Puisque vous mentionnez que vous avez résolu le problème pour votre situation spécifique, ci-dessous une solution à usage général. Grâce à
xdotool
l'--sync
option de, cela fonctionne assez fiable dans les tests que j'ai effectués; Je pouvais «envoyer» des commandes à des fenêtres de terminal spécifiques et cela fonctionnait parfaitement sans exception.Comment ça marche dans la pratique
La solution existe à partir d'un script, qui peut être exécuté avec deux options
-set
et-run
:Pour configurer (ouvrir) un nombre arbitraire de fenêtres de terminal, dans cet exemple 3:
Trois nouveaux terminaux s'ouvriront, leur identifiant de fenêtre est mémorisé dans un fichier caché:
Pour des raisons de clarté, j'ai minimisé la fenêtre du terminal à partir de laquelle j'ai exécuté la commande :)
Maintenant que j'ai créé trois fenêtres, je peux envoyer des commandes à l'une d'entre elles avec la commande run (par exemple):
Comme indiqué ci-dessous, la commande a été exécutée dans le deuxième terminal:
Par la suite, je peux envoyer une commande au premier terminal:
faire
sudo apt-get update
courir dans le terminal 1:etc...
Comment installer
Le script a besoin des deux
wmctrl
etxdotool
:Copiez le script ci-dessous dans un fichier vide, sauvegardez-le sous
target_term
(sans extension!) Dans~/bin
(créez le répertoire~/bin
si nécessaire.Rendez le script exécutable (n'oubliez pas) et déconnectez-vous ou exécutez:
Maintenant, configurez vos fenêtres de terminal, avec le nombre de fenêtres requises comme argument:
Vous pouvez maintenant "envoyer" des commandes à l'un de vos terminaux avec la commande:
Le script
Remarques
Le script est défini pour
gnome-terminal
, mais peut être utilisé pour n'importe quel terminal (ou tout autre programme également) en changeant leapplication
dans la section head du script:Pas besoin de dire que le script ne fonctionne qu'avec la configuration du terminal (windows) qui a été appelée par la commande:
Les fenêtres du terminal seront alors "étiquetées" par le script, comme vous le mentionnez dans votre question.
target_term
session, le fichier caché, créé par le script sera simplement écrasé, il n'est donc pas nécessaire de le supprimer autrement.la source