- 论坛徽章:
- 16
|
本帖最后由 expert1 于 2011-08-09 20:23 编辑
我ssh到一个机器,然后执行一个shell脚本,下边是expect的部分,ssh过去的部分我就不贴。
上边是登陆部分,登陆成功提示符“#”
expect "#"
send "du -sh tmp.exp |awk '{print \$1}'\r"
expect -re {.*\/(.*)\r\n.*}
expect "#"
send "exit\r"
expect eof
我发现了一个奇怪的现象,执行多次有时候会卡住到超时,看debug内容:
expect: does " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n[root@monitor ~]# " (spawn_id exp7) match regular expression ".*\r\n(.*)\r\n.*"? yes
expect: set expect_out(0,string) " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n[root@monitor ~]# "
expect: set expect_out(1,string) "8.0K"
expect: set expect_out(spawn_id) "exp7"
expect: set expect_out(buffer) " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n[root@monitor ~]# "
expect: does "" (spawn_id exp7) match glob pattern "#"? no
就这里开始卡住了。
原来失败的时候,expect -re expect -re {.*\/(.*)\r\n.*}
把下一个[root@localhost~]#都给匹配上了,导致了最后的expect "#"没东西可以匹配,所以超时,而奇怪的是,有时候又能执行,看结果是这个re没把[root@localhost~]# 匹配,所以下一个expect "#"执行OK了,exit退出。debug如下:
expect: does " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n" (spawn_id exp7) match regular expression ".*\r\n(.*)\r\n.*"? yes
expect: set expect_out(0,string) " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n"
expect: set expect_out(1,string) "8.0K"
expect: set expect_out(spawn_id) "exp7"
expect: set expect_out(buffer) " du -sh tmp.exp |awk '{print $1}'\r\n8.0K\r\n"
8.0K
expect: does "" (spawn_id exp7) match glob pattern "#"? no
expect: does "[root@localhost ~]# " (spawn_id exp7) match glob pattern "#"? yes
我就纳闷了,同一个机器,执行多次,居然这样的结果,如何来控制这种异常?
感觉失败的时候buffer区域滚动的东西太多了,但同一个re为啥有时候能匹配,有时候又不能? |
|