bash with expect:帮助访问变量

时间:2011-05-08 21:53:12

标签: bash expect

我正在写一个期待的bash脚本 以下是剧本:

#!/bin/bash    

set prompt 0  
set bash_spawn_id $spawn_id  


check_prompt(){  
expect -c "  
spawn telnet $IP $PORT1  
set telnet_spawn_id $spawn_id  

sleep 1  
send \"\r\"  
send \"\r\"  
expect {  
loader> {set spawn_id $bash_spawn_id ; set prompt 1;set spawn_id $telnet_spawn_id }  
}  
expect{  
Login> {set spawn_id $bash_spawn_id ; set prompt 2;set spawn_id $telnet_spawn_id }  
}  
"  
}  

基本上check_prompt是我在bash脚本中调用的函数。当我打电话给某个提示时,如果我看到提示符为加载器>然后将bash变量提示设置为1,否则如果它看到Login>则将其设置为2。提示。为了进入bash上下文访问变量,我将设置适当的spawn_id来访问变量。 但我面临的错误是:

spawn telnet 1.2.1.7 2001  
can't read "telnet_spawn_id": no such variable  
    while executing  
"set telnet_spawn_id  "  

解决方案:

经过2个小时的挣扎,我终于可以实现我想要的了 感谢Eduardo的帮助。这是部分程序,您可以轻松地完成其余部分:

#!/bin/bash  

check_prompt() {  
expect -c "    
log_user 0    
spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
expect {  
loader> {send_user \"1\" }  
Login> {send_user \"2\"}  
}  
" > tempfile  
read output < tempfile  
echo $output  
}    

chk_prompt() {  
check_prompt > prompt  
read output < prompt  
echo out=$output  
}    

基本上我可以重定向expect流程的输出,根据提示输出1或2。我通过将log_user设置为零来抑制其他日志。休息是自我解释的:) 如果你们需要任何帮助,请告诉我们:)

1 个答案:

答案 0 :(得分:1)

我不是期望的专家,但我很确定你应该使用标准语法如prompt=0在bash中声明你的变量,而不是在bash中设置内部shell的set关键字选项。

您收到的错误消息有点误导,但我很想说$spawn_id为空(因为您之前没有真正设置它,而仍然在bash中)有事情要做用它。