打开终端,运行命令,稍后返回SAME终端并执行另一个命令

时间:2018-06-11 17:03:53

标签: linux bash

*请注意,我正在尝试通过脚本自动执行此操作。显然我可以手动轻松完成。

修改

在更好地理解这个问题后,我可以更好地提出这个问题。我正在尝试将命令写入给定终端的标准输入。它们需要被接受并作为该终端中的命令运行。

我需要做什么:

我需要从shell脚本中打开终端。我们称它为终端1.从终端1我需要运行一个命令。

然后,我需要打开第二个终端(终端2)并运行第二个命令并等待该命令运行完成。

现在,问题是,如何 RETURN 到终端1并从该终端内执行另一个命令? (然后我需要返回到终端2并执行另一个命令,但这应该是与此答案相同的过程)。

在实例化时必须有某种方法来保留终端实例的进程ID

gnome-terminal -e *command* <something to get PID of resulting terminal here?>

我发现的相关答案(我没有找到我要找的所有内容):

声明

我已经使用Linux了很长一段时间,并且很适合在终端上工作。然而,这是我以前从未尝试过的事情。如果我只是遗漏了关于终端如何运作的基本信息,请指出我必要的资源方向以加快速度。

2 个答案:

答案 0 :(得分:1)

要从其他程序或终端向终端写入命令,必须使用系统输入输出控制系统调用(ioctl)。 (情况可能并非总是如此,但这是我找到的解决方案)。我还将介绍Python的解决方案,但我引用了其他资源,包括下面的方法。

首先,您需要要发送命令的终端实例的进程标识符(PID)才能执行。这可以通过几种方式确定,但我找到的最简单的方法是通过以下命令:

ps -A | grep bash --color=always

这将输出一个打开的终端列表及其PID和点数。我发现知道哪个是你想要的最简单方法是通过程序打开终端,运行上述命令,最近打开的终端将是列表中的最后一个。如果你需要确定,我相信你可以更加喜欢它,但这不是这个问题的重点。你会看到类似这样的东西,其中pts /#是你之后的

108514 pts/2    00:00:00 bash

接下来使用以下代码,只需将其保存到您选择的.py文件中(此代码的功劳在下面的第一个链接中得到答案,即Python代码)。请注意,下面的示例是硬编码的,以发送&#34; ls&#34;命令。再次,根据您自己的偏好和用例,更改硬编码命令或使其不是硬编码。

import fcntl
import sys
import termios

with open(sys.argv[1], 'w') as fd:
    for c in "ls\n":
        fcntl.ioctl(fd, termios.TIOCSTI, c)

然后,只需调用新函数并根据之前找到的pts编号将其传递给以下路径:

python <your_fcn_name_here).py /dev/pts/#

在Ubuntu 14.04上为我工作得很好。我很快就会在CentOS上尝试它。没有必要安装任何python库来实现它。

其他资源

这个问题在这里有所不同:

有关IOCTL的更多信息:

答案 1 :(得分:0)

相关问题