我有一个期望脚本,当使用一个程序产生SSH时,以后使用expect不起作用,当直接使用ssh spawn时,期望的东西似乎工作正常。 知道这里有什么不妥吗?
我在其他情况下使用相同的代码段并且工作正常。
proc sshLogin {serverName userName password} {
global logfd
set timeout 10
logMessage "Connecting to server = $serverName, please wait..."
log_user 0
spawn -noecho ssh -X "$userName\@$serverName"
expect {
"password:" {
send "$password\r"
expect {
"]#" {
log_user 1
logMessage "Logged in to Server = $serverName"
return 1
}
"Permission denied" {
log_user 1
logMessage "Incorrect password!"
}
}
}
timeout {
log_user 1
logMessage "Connection to $serverName timed out"
}
eof {
log_user 1
logMessage "Connection to $serverName failed!"
}
}
return 0
}
答案 0 :(得分:3)
您还应通过添加以下内容声明spawn_id
是您的过程中的全局变量:
global spawn_id
或将global logfd
更改为:
global logfd spawn_id
这是因为spawn_id
变量的当前值用于确定正在控制的内容(如果您希望控制两个子进程,则至关重要)。期望尝试做一些“聪明”的事情来处理你在没有声明事情的情况下将expect
/ send
调用放在一个过程中的情况,但它不是一个非常可靠的方法,它不起作用与spawn
本身:你必须明确(在使用程序时无论如何这是一个好主意)。