我想运行一组命令,其中一些我希望使用shelll脚本在另一个终端中同时运行。我们说我有以下四个命令
command1
command2
command3
command4
首先,我想在终端1&中启动command1
当它继续执行时(它会在一段时间内从服务器轮询数据)我希望command2
在终端2中开始执行。然后当comamnd1
完成时我希望command3
开始执行终端1&类似地,当command2
完成command4
时应该从终端2开始。我需要两个终端,因为我需要监视两组命令的输出。如何使用shell脚本实现这一目标?是否也可以找到一个独立于终端程序的解决方案,以便任何人都可以获取脚本并在他们的机器上运行?
答案 0 :(得分:-1)
您可以编写两个shell脚本来执行各自的任务,以便各自的终端。然后,如果你想使用python,你可以使用subprocess.Popen
独立调用每个命令。此方法不会等待进程完成,您可以告诉它在shell中运行它们。
例如:
result1 = subprocess.Popen('command1and3.sh', shell=True)
result2 = subprocess.Popen('command2and4.sh', shell=True)
答案 1 :(得分:-1)
您描述需求的方式,init(configuration:)
与URLSession
以及command3
与command1
的依赖关系,但这些依赖于两组命令没有互动。
处理这个问题的一个简单方法是使用两个单独的脚本,手动打开两个终端(使用您选择的终端模拟器),然后分别启动这两个脚本,每个窗口一个,这看起来像这样: / p>
<强> SCRIPT1 强>
command4
<强> SCRIPT2 强>
command2
另一个非常容易的事情是在一个脚本中启动所有内容,但是让两个集合分别执行,将它们的输出发送到不同的日志文件(这将避免在同一个终端中混合它们,但也会隐藏它们)。它看起来像这样:
#!/bin/bash
command1
command3
我想这不是你想要的。您可能需要在GUI中使用两个终端窗口。不幸的是,没有通用的方法来实现这一点,因为我们不知道您的操作系统和终端程序是什么。如果终端不在与脚本相同的机器上执行(除非您使用GNU #!/bin/bash
command2
command4
或其他终端多路复用实用程序,首先创建终端,然后从另一台机器连接到终端),这将无法实现。 / p>
答案 2 :(得分:-1)
这是另一种想法,它只使用一个终端窗口,但在所有输出行前面加上命令名称,以便您可以轻松查看它们的来源:
# start command1 in background
command1 &
# start command2, prefixing all output with its name
command2 | sed 's/^/COMMAND2: /'
# wait till finished
wait
command3 &
command4 | sed 's/^/COMMAND4: /'
wait
答案 3 :(得分:-1)
如果您熟悉python,可以查看Python pexpect模块(https://pexpect.readthedocs.io/en/stable/)。也许这对你想做的事情来说太过分了,但正如你提到的那样你想监视两个终端的输出,pexpect可能非常适合你。