Chinaunix

标题: 2个for就成功,用1个for循环就失败?急!!!! [打印本页]

作者: tommy2004    时间: 2008-08-10 17:33
标题: 2个for就成功,用1个for循环就失败?急!!!!
脚本名字:aaa,作用是自动登录到192.168.1.1和192.168.1.2上面,并且把file1.txt和file2.txt复制到这2台机器上面.
#!/usr/bin/expect -f
for {set e 1} {$e<=2} {incr e} {
spawn scp /etc/file1.txt root@192.168.1.$e:/etc/
expect "*password: "
send "EKf3dU\r"
expect eof
}

for {set f 1} {$f<=2} {incr f} {
spawn scp /root/2file.txt root@192.168.1.$f:/root
expect "*password: "
send "EKf3dU\r"
expect eof
}
运行脚本:expect  aaa,可以执行成功
但是我觉得2个循环不好,想把第二个循环的以下语句:
spawn scp /root/2file.txt root@192.168.1.$f:/root
expect "*password: "
send "EKf3dU\r"
放进去第一个for循环里面,结果就执行失败了.
作者: tommy2004    时间: 2008-08-10 17:46
原帖由 tommy2004 于 2008-8-10 17:33 发表
脚本名字:aaa,作用是自动登录到192.168.1.1和192.168.1.2上面,并且把file1.txt和file2.txt复制到这2台机器上面.
#!/usr/bin/expect -f
for {set e 1} {$e



这个问题对于高手来说应该很容易吧,但是我半天没解决,请大家帮忙,如果没人回复,我就一直顶着,一直到有人回复为止,谢谢!!
作者: liaosnet    时间: 2008-08-10 18:06
标题: 回复 #2 tommy2004 的帖子
重复了~~~
作者: gavinzhm    时间: 2008-08-10 18:38
两个合并的时候,这个也写了两个~?

expect eof
作者: tommy2004    时间: 2008-08-10 22:03
原帖由 gavinzhm 于 2008-8-10 18:38 发表
两个合并的时候,这个也写了两个~?

expect eof


#!/usr/bin/expect -f
for {set e 1} {$e<=2} {incr e} {
spawn scp /etc/file1.txt root@192.168.1.$e:/etc/
expect "*password: "
send "EKf3dU\r"

spawn scp /root/2file.txt root@192.168.1.$f:/root
expect "*password: "
send "EKf3dU\r"
expect eof
}

写成这样也不行.急!!!!!!!!!!!!它会只执行最后一个scp命令,开始那个scp没有执行,奇怪!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: tommy2004    时间: 2008-08-10 22:07
原帖由 tommy2004 于 2008-8-10 17:33 发表
脚本名字:aaa,作用是自动登录到192.168.1.1和192.168.1.2上面,并且把file1.txt和file2.txt复制到这2台机器上面.
#!/usr/bin/expect -f
for {set e 1} {$e



我看到这么多的浏览量,怎么没有人回复的有意义一点,是不是就没人懂啊???
作者: tommy2004    时间: 2008-08-11 00:08
自己顶一下!!!!!
作者: waker    时间: 2008-08-11 08:05
楼主能不能一次scp两个文件啊?顶帖是要消耗人品的,顶多了自然就没人回答了
作者: tommy2004    时间: 2008-08-11 09:27
标题: 回复 #8 waker 的帖子
老大,我就是希望你出手啊,哈哈哈!!!
#!/usr/bin/expect -f
for {set e 1} {$e<=2} {incr e} {
spawn scp /etc/file1.txt root@192.168.1.$e:/etc/
expect "*password: "
send "EKf3dU\r"

spawn scp /root/2file.txt root@192.168.1.$f:/root
expect "*password: "
send "EKf3dU\r"
expect eof
}
写成这样,然后expect  aaa就只执行了scp /root/2file.txt root@192.168.1.$f:/root
开始那个scp /etc/file1.txt root@192.168.1.$e:/etc/并没有执行,郁闷。。。
作者: tommy2004    时间: 2008-08-11 09:30
原帖由 waker 于 2008-8-11 08:05 发表
楼主能不能一次scp两个文件啊?顶帖是要消耗人品的,顶多了自然就没人回答了




而且我不光是scp,scp的确可以一次复制好多个文件,但是我还想要ssh 过去然后再send一些命令过去执行,如果一个for循环他就只执行最后一个命令。能够看出是什么原因吗?
作者: waker    时间: 2008-08-11 10:20
标题: 回复 #10 tommy2004 的帖子
因为第一个scp想和tty交互的时候tty和第二个scp交互去了,tty和第二个scp交互完脚本就结束了,第一个scp就这样被憋死了

在第一个send passwd以后加个expect eof
作者: waker    时间: 2008-08-11 10:27
哦,好像解释的还是有问题,
第一个scp应该在失去tty后自己就结束了
作者: tommy2004    时间: 2008-08-11 12:53
原帖由 waker 于 2008-8-11 10:20 发表
因为第一个scp想和tty交互的时候tty和第二个scp交互去了,tty和第二个scp交互完脚本就结束了,第一个scp就这样被憋死了

在第一个send passwd以后加个expect eof



问题解决了,谢谢!老大,这样都被你想出来,你也太牛B了!!
作者: tommy2004    时间: 2008-08-11 14:19
原帖由 waker 于 2008-8-11 10:27 发表
哦,好像解释的还是有问题,
第一个scp应该在失去tty后自己就结束了



我想从1台机器自动登录到这几十台机器,然后远程输入以下的时间同步命令到crontab,命令如下:
0 3 * * * /usr/sbin/ntpdate 210.72.145.44;/sbin/hwclock -w,但是没有发现crontab存放的具体文件在哪里??




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2