Bash

終端命令遵循另一個終端命令的生命週期

  • June 23, 2021

我想要實現的是一個 bash 腳本,甚至更好的是一個 bash 行,它可以並行執行兩個基於終端的應用程序。我知道這些命令&;但在我的情況下它們不適用,因為我的兩個命令都保持終端打開並且需要彼此正常執行。它可能看起來像一個邊緣案例,但我的具體案例非常簡單,我認為它在許多類似情況下可能會有所幫助。

我要做的是解析來自使用 swo 協議的 USB 埠的消息,所以我非常討厭的解決方法是:

  1. 打開終端一,執行openocd -f connect_swo.cfg(終端1掛起)
  2. 打開終端二,執行python3 swo_parser.py(終端2掛起,終端1列印值)
  3. ctrl+c然後用兩個單獨的信號終止兩個命令

預期的解決方案將類似於:

  1. 執行打開兩個連接會話的魔術命令,並在單獨的會話中打開我的兩個命令
  2. 一個ctrl +c終止兩個命令

PS:如果我應該將問題移至超級使用者,請評論我

使用 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/

如果openocd絕對需要 TTY 連接到 stdin,並且 Python 腳本需要在 之後執行,您可以通過使用延遲腳本執行的開始openocd來反轉執行順序:sleep

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

單個Ctrl``C不會終止兩者,但可能有一種使用traps 的方法。或類似的東西:

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

引用自:https://unix.stackexchange.com/questions/574375