转载请标明出处~
#!/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 ;的使用。
运行结果截图: