我想要实现的是一个 bash 脚本,甚至更好的是一个可以并行运行两个基于终端的应用程序的 bash 行。我知道这些命令&
,;
但就我而言,它们不适用,因为我的两个命令都保持终端打开并且需要彼此才能正常运行。这可能看起来像是一个边缘案例,但我的具体用例非常简单,我认为它可能在许多类似的情况下有所帮助。
我想做的是解析来自使用 swo 协议的 USB 端口的消息,所以我相当讨厌的解决方法是:
- 打开终端一,运行
openocd -f connect_swo.cfg
(终端1挂起) - 打开终端二,运行
python3 swo_parser.py
(终端2挂起,终端1打印值) - 然后用两个单独的
ctrl+c
信号终止这两个命令
预期的解决方案类似于:
- 运行魔术命令来打开两个连接的会话以及我在单独会话上的命令
- 一个命令
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
SingleCtrlC不会终止两者,但可能有一种使用trap
s 的方法来解决这个问题。或者类似的东西:
(sleep 5 ; python3 swo_parser.py) & openocd -f connect_swo.cfg
kill %1
答案3
使用类似的程序同时