Bash
終端命令遵循另一個終端命令的生命週期
我想要實現的是一個 bash 腳本,甚至更好的是一個 bash 行,它可以並行執行兩個基於終端的應用程序。我知道這些命令
&
,;
但在我的情況下它們不適用,因為我的兩個命令都保持終端打開並且需要彼此正常執行。它可能看起來像一個邊緣案例,但我的具體案例非常簡單,我認為它在許多類似情況下可能會有所幫助。我要做的是解析來自使用 swo 協議的 USB 埠的消息,所以我非常討厭的解決方法是:
- 打開終端一,執行
openocd -f connect_swo.cfg
(終端1掛起)- 打開終端二,執行
python3 swo_parser.py
(終端2掛起,終端1列印值)ctrl+c
然後用兩個單獨的信號終止兩個命令預期的解決方案將類似於:
- 執行打開兩個連接會話的魔術命令,並在單獨的會話中打開我的兩個命令
- 一個
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
不會終止兩者,但可能有一種使用trap
s 的方法。或類似的東西:(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg kill %1