
O que eu gostaria de alcançar é um script bash ou, melhor ainda, uma única linha bash que possa executar dois aplicativos baseados em terminal em paralelo. Estou ciente dos comandos &
, mas ;
no meu caso eles não são aplicáveis porque ambos os meus comandos mantêm o terminal aberto e precisam um do outro para funcionar corretamente. Pode parecer um caso extremo, mas meu caso de uso específico é bastante simples e acho que pode ser útil em muitos casos semelhantes.
O que estou tentando fazer é analisar uma mensagem de uma porta USB que usa o protocolo swo, então minha solução bastante desagradável é:
- Abra o terminal um, execute
openocd -f connect_swo.cfg
(terminal1 trava) - Abra o terminal dois, execute
python3 swo_parser.py
(terminal2 trava e terminal1 imprime valores) - Em seguida, encerrando ambos os comandos com dois
ctrl+c
sinais separados
A solução esperada seria algo como:
- Execute o comando mágico que abre duas sessões conectadas e ambos os meus comandos nas sessões separadas
- Um único
ctrl +c
encerra ambos os comandos
PS: Comente-me se devo mover a pergunta para superusuário
Responder1
Com o GNU Parallel você poderá fazer isso:
parallel --tty -j0 ::: 'openocd -f connect_swo.cfg' 'python3 swo_parser.py'
Se o GNU Parallel ainda não estiver instalado, veja:https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/
Responder2
Se openocd
for absolutamente necessário TTY conectado ao stdin, e o script Python precisar ser executado depois openocd
, você pode reverter a ordem de execução usando sleep
para atrasar o início da execução do script:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
Um single CtrlCnão encerrará ambos, mas pode haver uma maneira de contornar isso usando trap
s. Ou algo como:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
Responder3
Use um programa comosimultaneamente