zoukankan      html  css  js  c++  java
  • 同步文件至多个机器脚本(免输密码)

    转载请标明出处~

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

    运行结果截图:

  • 相关阅读:
    本地YUM源制作
    VMware虚拟机三种联网方法及原理
    虚拟机安装centos
    Tomcat服务时区设置
    Tomcat的HTTPS配置及HTTP自动跳转配置
    应用程序下载地址汇总
    Centos 7 iptables配置
    JAVA 线程状态
    LeetCode Summary Ranges
    LeetCode Basic Calculator II
  • 原文地址:https://www.cnblogs.com/hello-kelly/p/4833839.html
Copyright © 2011-2022 走看看