使用Expect perl模块,我编写了在本地主机上使用ssh命令来模拟终端的脚本。所以考虑下面的场景,我有一个使用expect模块的perl脚本(比如script.pl),并且有两个这种类型的命令
$ssh = Expect->spawn("ssh -Y $loginname\@$systemname")
所以这里的问题是......我正在使用终端来执行script.pl,我的代码有两个spawn命令。我注意到在用于执行script.pl的终端中启动了两个spawn命令。但我想要两个新的终端用于两个spawn命令。所以这里应该有三个终端,一个用于script.pl,两个用于script.pl中的每个spawn命令。
有没有办法使用Expect从单个perl脚本实现两个新终端?
答案 0 :(得分:1)
“有没有办法使用Expect从单个perl脚本实现两个新终端?”
不确定。但终端是一个像任何东西的应用程序。你必须明确地调用它;所有你产卵的都是ssh
。终端应用程序是异构的,因此您需要弄清楚系统上运行的终端应用程序以及如何在启动时启动应用程序。例如,对于Xfce终端,例如:
$ssh = Expect->spawn("Terminal -e \"ssh -Y $loginname\@$systemname\"");
应该有效。或者更好:
$ssh = Expect->spawn("Terminal", ("-e", "ssh -Y $loginname\@$systemname"));
但是,您的终端可能不是Xfce终端。如果您使用的是Windows,我相信它是cmd
。在Linux上,它取决于安装的内容;如果您使用的是发行版默认设置,则它将是DE附带的终端 - GNOME为gnome-terminal
,KDE为konsole
等。
但是,如果您以其他方式自动启动终端并让它们在启动时使用expect / ssh执行脚本,那么可能会更有意义。