繁体   English   中英

如何使用 shell 脚本生成一个新终端并在其上运行一些命令?

[英]How to spawn a new terminal and run some command on that using a shell script?

我想运行一组命令,其中一些我想使用 shellll 脚本在另一个终端中同时运行。 假设我有以下四个命令

command1
command2
command3
command4

首先,我想在终端 1 中启动command1并在它继续执行的同时(它从服务器轮询数据一段时间)我希望command2在终端 2 中开始执行。然后当comamnd1完成时,我希望command3在终端 1 中启动& 同样,当command2完成时, command4应该从终端 2 开始。我需要两个终端,因为我需要监视两组命令的输出。 如何使用 shell 脚本实现这一点? 是否也可以找到独立于终端程序的解决方案,以便任何人都可以获取脚本并在他们的机器上运行?

您可以编写两个 shell 脚本,为各自的终端执行各自的任务。 然后,如果您想使用 python,您可以使用subprocess.Popen独立调用每个命令。 此方法不会等待进程完成,您可以告诉它在 shell 中运行它们。

例如:

result1 = subprocess.Popen('command1and3.sh', shell=True)
result2 = subprocess.Popen('command2and4.sh', shell=True)

您描述需求的方式是command3command1command4command2的依赖关系,但是这些另外形成两组不交互的命令。

一种简单的处理方法是使用两个单独的脚本,手动打开两个终端(使用您选择的终端仿真器),然后分别启动这两个脚本,每个窗口中一个,如下所示:

脚本1

#!/bin/bash
command1
command3

脚本2

#!/bin/bash
command2
command4

另一件非常简单的事情是在单个脚本中启动所有内容,但让这两组分别执行,将它们的输出发送到不同的日志文件(这将避免将它们混合在同一个终端中,但也会隐藏它们)。 它看起来像这样:

#!/bin/bash
{ command1 ; command3 ; } >/path/to/log1 2>&1 &
{ command2 ; command4 ; } >/path/to/log2 2>&1 &

但是,我想这不是您想要的。 您可能希望 GUI 中有两个终端窗口。 不幸的是,没有通用的方法来实现这一点,因为我们不知道您的操作系统和终端程序是什么。 如果终端与脚本不在同一台机器上执行,则这是不可能的(除非您使用 GNU screen或其他终端多路复用实用程序,首先创建一个终端,然后从另一台机器连接到它)。

这是另一种想法,它只使用一个终端窗口,但在所有输出行前面加上命令名称,以便您可以轻松查看它们的来源:

# 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

如果您熟悉 python,可以查看 Python pexpect 模块( https://pexpect.readthedocs.io/en/stable/ )。 也许这对于您想做的事情来说太多了,但是正如您提到的要监视两个终端的输出, pexpect 可能非常适合您。

xterm -e 'echo "This echo command print in new terminal (window 1)"'
xterm -e 'echo "This echo command print in new terminal (window 2)"'
xterm -e 'echo "This echo command print in new terminal (window 3)"'

将启动一个 Xterm 窗口并告诉它执行该命令。

xterm替换为您正在使用的实际终端程序(例如gnome-terminal )。 它也可能使用不同的语法来提供要执行的命令,因此请检查其文档以获取正确的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM