rsync同步两台web证书

#!/bin/bash
function func_expect {
ExpEnv=`which expect`
$ExpEnv -c "
set timeout -1;
spawn bash -c \"$1\";
expect {
\"(yes/no)?\" {send \"yes\n\";expect \"assword:\";send \"$2\n\"}
\"assword:\" {send \"$2\n\"}
eof {exit 0;}
}
expect eof"
}
pwd="J000406w!ss"
cmd1="/usr/bin/rsync -e 'ssh -p 33021 -o StrictHostKeyChecking=no'  /root/.acme.sh/youlai.cn/* 172.16.111.123:/root/.acme.sh/youlai.cn/"
func_expect "$cmd1" "$pwd"

这里会出现一个问题:rsync 匹配通配符 * 失败 link_stat failed: No such file or directory

上面的cmd1命令执行时,不报错误,并正常的同步数据,此时会弹出交互界面,并提示要输入服务器的密码,但这种操作放在脚本里就要expect来支持,放在expect里面的话会报如下错误:

> rsync: link_stat "/root/.acme.sh/youlai.cn/*" failed: No such fileor directory (2)

> 具体情况如下:
> 
> 刚开始的时候我以为是rsync无法匹配通配符*才导致的。
> 
> 后来发现不是该问题,是由于expect里面无法匹配 * 才导致的。
> 
> 解决办法:
> 
> 在spawn 后面加上 bash -c "command"
> 
> 这样expect就认出了通配符*。

PS:为什么在spawn处用" $1" 而不是"$1" ?

   因为在上面已经有"了,此处用  \  转义。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值