web-dev-qa-db-ja.com

ターミナルコマンドは、別のターミナルコマンドの存続期間に従います

私が達成したいのは、bashスクリプト、または2つの端末ベースのアプリを並行して実行できる単一のbashラインです。私はコマンド&;を知っていますが、私の場合、両方のコマンドが端末を開いたままにし、互いに正しく実行する必要があるため、これらは適用できません。エッジケースのように見えるかもしれませんが、私の特定のユースケースは非常に単純であり、多くの同様のケースで十分に役立つと思います。

私がやろうとしているのは、swoプロトコルを使用するUSB​​ポートからのメッセージを解析することです。したがって、私の非常に厄介な回避策は次のとおりです。

  1. ターミナル1を開き、openocd -f connect_swo.cfgを実行します(ターミナル1がハングします)
  2. ターミナル2を開き、python3 swo_parser.pyを実行します(ターミナル2がハングし、ターミナル1が値を出力します)
  3. 次に、2つの別々のctrl+c信号で両方のコマンドを終了します

予想される解決策は次のようになります。

  1. 接続された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 /

1
Ole Tange

同時に のようなプログラムを使用してください

openocdが絶対にstdinに接続されたTTYを必要とし、Pythonスクリプトをopenocdの後に実行する必要がある場合は、sleepを使用してスクリプト実行の開始を遅らせることにより、実行の順序を逆にすることができます。

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

独身者 CtrlC 両方を終了することはありませんが、trapsを使用してそれを回避する方法があるかもしれません。または次のようなもの:

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