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

转载请标明出处~

#!/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 "};

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 ;的使用。

运行结果截图:

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