终端命令遵循另一个终端命令的生命周期

终端命令遵循另一个终端命令的生命周期

我想要实现的是一个 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:如果我应该将问题移交给超级用户,请评论我

答案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不会终止两者,但可能有一种使用traps 的方法来解决这个问题。或者类似的东西:

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

答案3

使用类似的程序同时

相关内容