码迷,mamicode.com
首页 > 其他好文 > 详细

通过expect执行scp,传输文件不完整的解决方法

时间:2015-07-16 19:56:55      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:shell   expect   

写了一个脚本来传输文件,类似于这样:

sendsystem(){
expect -c "
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}


sendsysaux(){
expect -c "
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/sysaux01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}

结果:

spawn scp /home/oracle/std_control01.ctl oracle@192.168.134.134:/oracle/oradata/standby/std_control01.ctl
oracle@192.168.134.134‘s password: 
std_control01.ctl                                                                               100% 9520KB   9.3MB/s   00:00    
spawn scp /oracle/oradata/orcl/system01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
system01.dbf                                                                                     92%  646MB  33.9MB/s   00:01 ETA
spawn scp /oracle/oradata/orcl/sysaux01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
sysaux01.dbf                                                                                    100%  600MB  31.6MB/s   00:19    
spawn scp /oracle/oradata/orcl/temp01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
temp01.dbf                                                                                      100%  200MB  66.7MB/s   00:03    
spawn scp /oracle/oradata/orcl/undotbs01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
undotbs01.dbf                                                                                   100%  200MB  40.0MB/s   00:05 

system01.dbf没传完就不传了
又试了几次发现偶尔其他文件也会传不完就不传了

最后发现是因为expect默认timeout为30S
手动添加set timeout -1设置超时时间为无穷大,问题解决

sendsystem(){
expect -c "
           set timeout -1
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

通过expect执行scp,传输文件不完整的解决方法

标签:shell   expect   

原文地址:http://blog.csdn.net/ashic/article/details/46914589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!