Terminalbefehl folgt der Lebensdauer eines anderen Terminalbefehls

Terminalbefehl folgt der Lebensdauer eines anderen Terminalbefehls

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:

  1. Öffne Terminal 1 und starte es openocd -f connect_swo.cfg(Terminal1 hängt)
  2. Öffne Terminal 2 und führe es aus python3 swo_parser.py(Terminal 2 hängt sich auf und Terminal 1 druckt Werte)
  3. Anschließend werden beide Befehle mit zwei separaten ctrl+cSignalen beendet.

Die erwartete Lösung wäre etwa:

  1. Führen Sie einen magischen Befehl aus, der zwei verbundene Sitzungen öffnet, und führen Sie beide Befehle in den separaten Sitzungen aus
  2. Ein einziger Befehl ctrl +cbeendet 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 openocdunbedingt 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 sleepden 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 traps zu umgehen. Oder etwas wie:

(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1

Antwort3

Verwenden Sie ein Programm wiegleichzeitig

verwandte Informationen