
私が実現したいのは、2 つのターミナル ベースのアプリを並行して実行できる bash スクリプト、またはさらに良いのは単一の bash 行です。コマンドについては知っていますが&
、;
私の場合は、両方のコマンドがターミナルを開いたままにし、適切に実行するために互いのコマンドを必要とするため、適用できません。エッジ ケースのように思えるかもしれませんが、私の特定の使用例は非常に単純であり、同様の多くのケースで役立つと思います。
私がやろうとしているのは、swo プロトコルを使用する USB ポートからのメッセージを解析することなので、私のかなり厄介な回避策は次のとおりです。
- ターミナル 1 を開いて実行します
openocd -f connect_swo.cfg
(ターミナル 1 がハングします) - ターミナル2を開いて実行します
python3 swo_parser.py
(ターミナル2はハングし、ターミナル1は値を出力します) ctrl+c
次に、2つの別々の信号で両方のコマンドを終了します。
期待される解決策は次のようになります。
- 2つの接続されたセッションを開き、別々のセッションで両方のコマンドを実行するマジックコマンドを実行します。
- 1つのコマンド
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
1 つではCtrlC両方を終了しませんが、trap
s を使用すると回避できる可能性があります。または、次のようになります。
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
答え3
次のようなプログラムを使用する同時に