Eu gostaria de escrever um script para abrir vários programas (servidores) simultaneamente em terminais separados - não importa qual deles - e atribuir comandos diferentes a diferentes terminais com comandos "aterrissando" dentro do terminal correto. Isso é possível?
Talvez algo assim:
- terminal1 aberto
- abra terminal2 // simultaneamente com 1.
- command1 // executa no terminal1 sem abrir uma nova janela de terminal
- command2 // executa no terminal2 sem abrir uma nova janela de terminal
- ...
De alguma forma, posso rotular as janelas do terminal para que os comandos sejam executados dentro do terminal correto?
Eu também gostaria de assistir a todos os terminais enquanto seus programas estão em execução - meus programas têm um argumento para imprimir rastreio / depuração no terminal. Então, eu gostaria de ver quais mensagens são trocadas entre eles.
NOTA: Estou menos preocupado com a segurança dos dados trocados, pois esse script deve servir como uma "simulação". Eu configurei cada servidor para executar a partir de uma porta alocada no host local.
fonte
Respostas:
Como você mencionou, resolveu o problema para sua situação específica, abaixo de uma solução para uso geral. Graças ao
xdotool
's--sync
opção, ele funciona muito confiável nos testes que fiz; Eu poderia "enviar" comandos para janelas de terminal específicas e funcionou perfeitamente sem uma exceção.Como funciona na prática
A solução existe a partir de um script, que pode ser executado com duas opções
-set
e-run
:Para configurar (abrir) um número arbitrário de janelas de terminal, neste exemplo 3:
Três novos terminais se abrirão, seu ID de janela será lembrado em um arquivo oculto:
Por motivos de clareza, minimizei a janela do terminal da qual executei o comando :)
Agora que criei três janelas, posso enviar comandos para qualquer uma delas com o comando run (por exemplo):
Como mostrado abaixo, o comando foi executado no segundo terminal:
Posteriormente, posso enviar um comando para o primeiro terminal:
fazendo
sudo apt-get update
correr no terminal 1:e assim por diante...
Como configurar
O script precisa de ambos
wmctrl
exdotool
:Copie o script abaixo em um arquivo vazio, proteja-o como
target_term
(sem extensão!) Em~/bin
(crie o diretório,~/bin
se necessário.Torne o script executável (não se esqueça) e efetue logout / login ou execute:
Agora configure suas janelas de terminal, com o número de janelas necessárias como argumento:
Agora você pode "enviar" comandos para qualquer um dos seus terminais com o comando:
O script
Notas
O script está definido para
gnome-terminal
, mas pode ser usado para qualquer terminal (ou outro programa também), alterando aapplication
seção head do script:Não é necessário dizer que o script funciona apenas com a configuração do terminal (windows) que foi chamada pelo comando:
As janelas do terminal serão "rotuladas" pelo script, como você mencionou na sua pergunta.
target_term
sessão, o arquivo oculto, criado pelo script, será simplesmente substituído, portanto, não será necessário removê-lo.fonte