
Was ich erreichen möchte, ist ein Bash-Skript oder noch besser eine einzelne Bash-Zeile, die zwei terminalbasierte Apps parallel ausführen kann. Ich kenne die Befehle &
, ;
aber in meinem Fall sind sie nicht anwendbar, da beide Befehle das Terminal geöffnet halten und einander benötigen, um ordnungsgemäß ausgeführt zu werden. Es mag wie ein Sonderfall erscheinen, aber mein spezieller Anwendungsfall ist ziemlich einfach und ich denke, er könnte in vielen ähnlichen Fällen hilfreich sein.
Ich versuche, eine Nachricht von einem USB-Port zu analysieren, der das SWO-Protokoll verwendet. Mein ziemlich widerlicher Workaround ist daher:
- Öffne Terminal 1 und starte es
openocd -f connect_swo.cfg
(Terminal1 hängt) - Öffne Terminal 2 und führe es aus
python3 swo_parser.py
(Terminal 2 hängt sich auf und Terminal 1 druckt Werte) - Anschließend werden beide Befehle mit zwei separaten
ctrl+c
Signalen beendet.
Die erwartete Lösung wäre etwa:
- Führen Sie einen magischen Befehl aus, der zwei verbundene Sitzungen öffnet, und führen Sie beide Befehle in den separaten Sitzungen aus
- Ein einziger Befehl
ctrl +c
beendet beide Befehle
PS:Kommentieren Sie mich, wenn ich die Frage an den Superuser weiterleiten soll
Antwort1
Mit GNU Parallel sollten Sie Folgendes tun können:
parallel --tty -j0 ::: 'openocd -f connect_swo.cfg' 'python3 swo_parser.py'
Wenn GNU Parallel noch nicht installiert ist, schauen Sie unter:https://oletange.wordpress.com/2018/03/28/excuses-for-not-installing-gnu-parallel/
Antwort2
Wenn openocd
unbedingt eine TTY-Verbindung mit stdin erforderlich ist und das Python-Skript danach ausgeführt werden muss openocd
, können Sie die Ausführungsreihenfolge umkehren, indem Sie sleep
den Start der Skriptausführung verzögern:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
Ein einzelnes CtrlCbeendet nicht beide, aber es gibt vielleicht einen Weg, dies mit trap
s zu umgehen. Oder etwas wie:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
Antwort3
Verwenden Sie ein Programm wiegleichzeitig