
Lo que me gustaría lograr es un script bash o, mejor aún, una única línea bash que pueda ejecutar dos aplicaciones basadas en terminal en paralelo. Conozco los comandos &
pero ;
en mi caso no son aplicables porque ambos comandos mantienen la terminal abierta y se necesitan mutuamente para ejecutarse correctamente. Puede parecer un caso extremo, pero mi caso de uso específico es bastante simple y creo que podría ser de gran ayuda en muchos casos similares.
Lo que estoy tratando de hacer es analizar un mensaje desde un puerto USB que usa el protocolo swo, por lo que mi solución bastante desagradable es:
- Abra la terminal uno, ejecute
openocd -f connect_swo.cfg
(la terminal1 se cuelga) - Abra la terminal dos, ejecute
python3 swo_parser.py
(la terminal2 se bloquea y la terminal1 imprime valores) - Luego terminando ambos comandos con dos
ctrl+c
señales separadas
La solución esperada sería algo como:
- Ejecute el comando mágico que abre dos sesiones conectadas y ambos mis comandos en sesiones separadas
- Uno solo
ctrl +c
termina ambos comandos.
PD: Coméntame si debo pasar la pregunta a superusuario.
Respuesta1
Con GNU Parallel deberías poder hacer esto:
parallel --tty -j0 ::: 'openocd -f connect_swo.cfg' 'python3 swo_parser.py'
Si GNU Parallel aún no está instalado, mire:https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/
Respuesta2
Si openocd
es absolutamente necesario que TTY esté conectado a la entrada estándar y el script de Python debe ejecutarse después de openocd
, puede invertir el orden de ejecución usando sleep
para retrasar el inicio de la ejecución del script:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
Un single CtrlCno terminará ambos, pero podría haber una forma de evitarlo usando trap
s. O algo como:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
Respuesta3
Utilice un programa comoal mismo tiempo