
Я хотел бы получить скрипт bash или, что еще лучше, одну строку bash, которая может запускать два приложения на основе терминала параллельно. Я знаю команды &
, ;
но в моем случае они неприменимы, потому что обе мои команды держат терминал открытым и нуждаются друг в друге для правильной работы. Это может показаться пограничным случаем, но мой конкретный случай использования довольно прост, и я думаю, что это может помочь во многих подобных случаях.
Я пытаюсь проанализировать сообщение с порта USB, который использует протокол SWO, поэтому мой довольно неприятный обходной путь таков:
- Откройте терминал 1, запустите
openocd -f connect_swo.cfg
(терминал 1 зависает) - Откройте терминал два, запустите
python3 swo_parser.py
(терминал2 зависает, а терминал1 печатает значения) - Затем обе команды завершаются двумя отдельными
ctrl+c
сигналами.
Ожидаемое решение будет примерно таким:
- Запустить волшебную команду, которая открывает два связанных сеанса и обе мои команды в отдельных сеансах
- Один сингл
ctrl +c
завершает обе команды
PS: Напишите мне в комментариях, следует ли мне перенести вопрос на уровень суперпользователя.
решение1
С помощью GNU Parallel вы сможете сделать следующее:
parallel --tty -j0 ::: 'openocd -f connect_swo.cfg' 'python3 swo_parser.py'
Если GNU Parallel еще не установлен, посмотрите:https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/
решение2
Если openocd
TTY абсолютно необходим, подключенный к stdin, и скрипт Python необходимо запустить после openocd
, вы можете изменить порядок выполнения, используя sleep
для задержки начала выполнения скрипта:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
Один CtrlCне завершит оба, но это можно обойти с помощью trap
s. Или что-то вроде:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
решение3
Используйте такую программу, какодновременно