以下简单expect脚本的目标是获取远程计算机上的主机名名称
有时,expect脚本无法对$IP_ADDRESS执行ssh (因为远程计算机不活动,等等)
所以在这种情况下,expect脚本将在10秒后中断(超时10),这是可以的,但是.
有两种选择
。
在这两种情况下,expect都会退出
就会中断。
但是我不知道expect脚本是否成功地执行ssh?
是否有可能识别超时过程?或者因为超时而验证预期结束?
注意我的Linux机器版本-红帽子5.1
Expect脚本
[TestLinux]# get_host_name_on_remote_machine=`cat << EOF
> set timeout 10
> spawn ssh $IP_ADDRESS
> expect {
> ")?" { send "yes\r" ; exp_continue }
>
> word: {send $PASS\r}
> }
> expect > {send "hostname\r"}
> expect > {send exit\r}
> expect eof
> EOF`示例,以防我们无法连接到远程主机
[TestLinux]# expect -c "$get_host_name_on_remote_machine"
spawn ssh 10.17.180.23
[TestLinux]# echo $?
0发布于 2012-03-11 20:23:54
为了在超时时做一些明智的事情,你需要告诉expect应该发生什么:
set timeout 10
expect {
")?" { send "yes\r" ; exp_continue }
"word:" { send "$PASS\r" }
timeout { puts "timed out during login"; exit 1 }
}
set timeout -1 ; # Infinite...
expect ">" { send "hostname\r" }
expect ">" { send "exit\r" }
expect eof
exit注意上面我在遇到错误时是如何使用exit 1的。您的shell将能够通过$?等来获取这些信息(如果没有1参数,exit命令将导致脚本“成功”终止;如果您从脚本底部掉下,也会发生同样的情况)。
发布于 2012-03-11 14:13:31
没有真正回答原来的问题,但是当您只需要传递一个脚本来执行时,为什么要与SSH进行交互呢?毕竟是个贝壳。
我是说,快跑吧:
ssh user@host '/usr/bin/hostname'ssh将远程生成hostname命令,并将其stdout连接到生成ssh的进程的stdout。
回到重点--this看起来就像一个关于如何将操作绑定到超时条件的示例。
https://stackoverflow.com/questions/9655384
复制相似问题