配置 goagent 过程中,若一次设置多个 APPID,则需要重复输入多次 gmail 和密码,较为繁琐,于是写了一个 expect 脚本来简化该过程,代码如下1,
#! /usr/bin/expect -f
set timeout 60
if {$argc != 2} {
set scriptname [lindex [split $argv0 "/"] end]
send_user "Usage: $scriptname \"APPID01|APPID02..\" <email>\n"
exit
}
proc getpass pwprompt {
set oldmode [stty -echo -raw]
send_user "\n$pwprompt"
set timeout -1
expect_user -re "(.*)\n"
send_user "\n"
eval stty $oldmode
return $expect_out(1,string)
}
set appids [lindex $argv 0]
set appidlist [split [lindex $argv 0] "|"]
set email [lindex $argv 1]
set password [getpass "Please enter password: "]
set python "python2"
set uploader "/usr/share/goagent/server/uploader.zip"
set command "$python $uploader"
spawn $python $uploader
expect -nocase "appid:" {send "$appids\r"}
for {set i 0} {$i < [llength $appidlist]} {incr i} {
set appid [lindex $appidlist $i]
expect -nocase "application:" {send_user "\n\n==> Setup up appid: $appid"}
expect -nocase "email:" {send "$email\r"}
expect -nocase "password for" {send "$password\r"}
expect -nocase "email:" {send "$email\r"}
expect -nocase "password for" {send "$password\r"}
}
expect "上传成功" {send "\r"}
interact
使用方法很简单,运行脚本,而后输入密码即可:
sudo ./expect_goagent.tcl "appid01|appid02" your@gmail.com