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

同步文件至多个机器脚本(免输密码)

时间:2015-09-23 23:30:50      阅读:503      评论:0      收藏:0      [点我收藏+]

标签:

转载请标明出处~

 

#!/bin/bash

SPATH=/tmp/index.js    #测试路径/文件
DPATH=/tmp/index.js_bak  #目标路径/文件

distribute_rsync () {   ###分发函数
expect -c "  
spawn rsync -aP $1 $3:$2;
expect "password:" {send \"testpasswd\r\"};

expect eof;
"
}

for ADDR_IP in `cat addr_ip`  ## addr_ip 为ip地址文件
do
echo -e "\e[32mrsync for $ADDR_IP ........\e[0m"

distribute_rsync $SPATH $DPATH $ADDR_IP

done

所遇问题以及问题解决:

1、在bash 编译环境下,直接使用expect ,spawn报错:命令无法找到

    distribute.sh: line 8: spawn: command not found

尝试解决1: 添加#!/usr/bin/expect

报错:无法识别bash 环境下的变量定义以及函数定义

原因:expect 环境下,变量定义直接使用 : set 变量 值

                函数定义: proc 函数名(参数1 参数2....){}

最终解决:使用expect -c " ... "  ,在bash 环境下直接进入expect环境,可以完成交互部分(输入密码)

注意:expect -c 可以完成多次交互,但是需要注意句尾分号已经转义符以及 expect eof ;的使用。

运行结果截图:

技术分享

 

同步文件至多个机器脚本(免输密码)

标签:

原文地址:http://www.cnblogs.com/hello-kelly/p/4833839.html

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