ZBLOG

golang 实现自动捕获 rsync的密码输入提醒,用expert输入密码后自动执行

要在Golang中实现自动捕获rsync密码输入提示,并使用expect输入密码后自动执行,可以使用exec包来执行命令并与其进行交互。以下是一个示例代码:

package main

import (
	"bufio"
	"fmt"
	"log"
	"os/exec"
	"strings"
)

func main() {
	cmd := exec.Command("rsync", "source", "destination")

	stdout, err := cmd.StdoutPipe()
	if err != nil {
		log.Fatal(err)
	}

	err = cmd.Start()
	if err != nil {
		log.Fatal(err)
	}

	scanner := bufio.NewScanner(stdout)
	for scanner.Scan() {
		line := scanner.Text()
		fmt.Println(line)

		if strings.Contains(line, "password:") {
			sendPassword(cmd, "your_password")
		}
	}

	err = cmd.Wait()
	if err != nil {
		log.Fatal(err)
	}
}

func sendPassword(cmd *exec.Cmd, password string) {
	in, err := cmd.StdinPipe()
	if err != nil {
		log.Fatal(err)
	}

	go func() {
        defer in.Close()
        fmt.Fprintf(in, "%s\n", password)
    }()
}

请将source替换为您的源文件/目录路径,将destination替换为您的目标位置路径,并将your_password替换为正确的密码。

在该示例中,我们创建了一个命令对象并启动了rsync命令。然后,我们通过读取命令的stdout来监视输出,并搜索包含”password:“的行。一旦找到这样的行,就会调用sendPassword函数发送密码给rsync进程。

注意:这只是一个简单的示例,具体情况可能会因rsync版本或特定配置而有所不同。请根据您的实际需求进行相应调整。

希望对您有所帮助!如有进一步问题,请随时提问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18299

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?