0

我正在尝试编写一个期望脚本来执行以下操作..

打开 13 个终端窗口(gnome-terminal、xterm 等),每个窗口通过 ssh ( ssh InReach@10.1.6.254) 连接到终端服务器,并通过 expect 提供密码。

我可以让它在一个窗口中正常工作。我遇到的问题是让输入传递到每个窗口。

例如...

我可以

set timeout -1

spawn gnome-terminal -x ssh InReach@10.1.6.254

在一个while循环内并获得我的13个窗口。但我希望每个人都能通过期望自动登录。

4

2 回答 2

1

当您生成时,您需要缓存尝试设置的 $spawn_id 值。
例如

if [catch "spawn ssh -l mtc $ub1_ip_address" ub1_pid] {
    Log $ERROR "Unable to spawn ssh to Xubuntu.\n$ub1_pid\n"
    return 0
}
set stored_id $spawn_id

特别是要向一个终端会话发送命令,请执行

send -i $stored_id "command"

然后,在你联系每个人之前,你必须先做

 expect {
-i $stored_id

[ ...您的正则表达式,glob等...]
}

你可以找到一些附加信息http://wiki.tcl.tk/11583

我还建议利用 gnome-terminal 指定多个选项卡的能力,包括指示哪个是当前活动的选项卡,以及要执行的命令。 gnome-terminal --help-all很有帮助(没有双关语)。

于 2011-09-27T03:25:28.537 回答
1

您可以尝试稍微不同的方法。不要在期望脚本中打开终端窗口,而是在基本的 shell 脚本中打开它们,并让每个终端运行一个期望脚本来启动单个 SSH 会话。

所以期望脚本可以像这样简单:

#!/usr/bin/expect -f
spawn ssh InReach@10.1.6.254
# ... provide password ...
interact

和shell脚本:

#!/bin/sh
for a in `seq 1 13`; do
    gnome-terminal -x ./expect_script
done
于 2011-09-09T21:01:27.520 回答