2016-02-26 212 views
1

我有一个期望脚本与特定的IP和端口号调制解调器交互,以赶上返回错误。如果出现telnet超时或者出于某种原因无法连接,我想向用户报告错误。简而言之,如果命令失败,我想打印一条错误消息并退出,而不是继续执行脚本。泛型方法使用expect脚本(壳)

set -e doesn't work on expect script. 

您的建议将帮助我解决此问题。谢谢。

想再次强调,我使用expect脚本,而不是庆典/ sh的。

#!/usr/bin/expect 
try { 
    spawn telnet $HOSTIP $HOSTPORT 
} on error { 
    exit 1 
} 
.... 
.... 

回答

1

你必须expecttimeouteof来处理你的情况。

spawn telnet $HOSTIP $HOSTPORT 
# To control the timeout value, update this variable 
set timeout 60; # 1 min. 
expect { 
    timeout {puts "Time-out happened;exit 1} 
    eof {puts "EOF occured";exit 1} 
    "required-pattern" {puts "The modem is accessible"; exit 0} 
} 

更换"required pattern"字符串的任何图案,以确认设备的可访问性。

+0

感谢您的建议。我不确定所需的模式,因为我没有得到任何提示,或者在会话建立后没有任何内容打印在STDOUT上。在这种情况下,如果我忽略“required-pattern”这一行{puts“......”;退出0},脚本即使连接到调制解调器也会超时退出。请帮助我。谢谢。 – Vasanth

+0

为了使控制能够期望超时或eof以外的任何东西,我给了“*”;剧本继续。感谢您的解决方案。 – Vasanth