ZBLOG

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

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

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "os/exec"
  7. "strings"
  8. )
  9. func main() {
  10. cmd := exec.Command("rsync", "source", "destination")
  11. stdout, err := cmd.StdoutPipe()
  12. if err != nil {
  13. log.Fatal(err)
  14. }
  15. err = cmd.Start()
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. scanner := bufio.NewScanner(stdout)
  20. for scanner.Scan() {
  21. line := scanner.Text()
  22. fmt.Println(line)
  23. if strings.Contains(line, "password:") {
  24. sendPassword(cmd, "your_password")
  25. }
  26. }
  27. err = cmd.Wait()
  28. if err != nil {
  29. log.Fatal(err)
  30. }
  31. }
  32. func sendPassword(cmd *exec.Cmd, password string) {
  33. in, err := cmd.StdinPipe()
  34. if err != nil {
  35. log.Fatal(err)
  36. }
  37. go func() {
  38. defer in.Close()
  39. fmt.Fprintf(in, "%s\n", password)
  40. }()
  41. }

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

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?