Chinaunix首页 | 论坛 | 博客
  • 博客访问: 692695
  • 博文数量: 33
  • 博客积分: 10032
  • 博客等级: 上将
  • 技术积分: 1383
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-22 18:53
文章分类

全部博文(33)

文章存档

2011年(4)

2010年(10)

2009年(14)

2008年(5)

我的朋友

分类:

2010-05-07 12:24:46

有时我们写expect脚本就是为了在另外一台机器上执行一个命令,下面的脚本就可以通用一些。

#! /usr/bin/expect

set user [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
set filename [lindex $argv 3]
set cmd [lrange $argv 4 end]

spawn ssh $user@$ip $cmd
set done 1
set timeout 10
while {$done} {
        expect {
                -nocase "password: " {
                        send "$password\n"
                        set done 0
                }
                "yes/no" { send "yes\n" }
        }
}

expect -re "\n(.*)\r"

set file [open $filename "w"]
puts $file [regsub -all "\r" $expect_out(buffer) ""]
close $file

# ./ssh.exp chris necho password /tmp/1 cat /etc/passwd

如果命令复杂一点,可以先传一个文件过去,再执行。
#! /usr/bin/expect

set user [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
set file [lindex $argv 3]
set dfile /tmp/1

spawn scp $env(PWD)/$file $user@$ip:$dfile
set done 1
while {$done} {
        expect {
                -nocase "password: " {
                        send "$password\n"
                        set done 0
                }
                "yes/no" { send "yes\n" }
        }
}
expect -re "\n(.*)\r"

spawn ssh $user@$ip $dfile
expect -nocase "password: " {
                send "$password\n"
}
expect -re "\n(.*)\r"

# ./scp.exp chris necho password sed.sh
# cat sed.sh
#!/bin/bash

# 把一个文件的第二列替换为hostname
sed "s/\(.*\)[[:blank:]]\(.*\)[[:blank:]]\(.*\)/\1 $HOSTNAME \3/" /home/chris/file
阅读(1305) | 评论(0) | 转发(0) |
0

上一篇:OpenSolaris IPMP

下一篇:~/.screenrc

给主人留下些什么吧!~~