我正在尝试编写一个将执行以下操作的expect脚本。
打开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个窗口。但我希望每个人都能通过expect自动登录。
答案 0 :(得分:1)
您可以尝试稍微不同的方法。不要在expect脚本中打开终端窗口,而是在基本的shell脚本中打开它们,让每个终端运行一个expect脚本来启动单个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
答案 1 :(得分: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
[...你的正则数据,整数等...]
}
你可以找到一些add'l info http://wiki.tcl.tk/11583
我还建议使用gnome-terminal指定多个选项卡的功能,包括指示哪个是当前活动的选项卡,以及要执行的命令。 gnome-terminal --help-all
很有用(没有双关语)。