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


    转载请标明出处~

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

    运行结果截图:

  • 相关阅读:
    数论分块与整除相
    P3254——DP&&入门
    P3384——树链剖分&&模板
    树链剖分模板
    P4145——线段树点修改&&模板题
    P1198最大数——线段树点修改&&模板题
    线段树(四)——两个标记(add和set)
    epoll 知识总结
    C++中的mutable关键字
    [LeetCode] Max Points on a Line
  • 原文地址:https://www.cnblogs.com/hello-kelly/p/4833839.html
Copyright © 2020-2023  润新知