要在Golang中执行带有密码的命令,可以使用os/exec
包和StdinPipe()
函数来提供密码输入。以下是一个示例代码片段,演示如何输入密码:
package main
import (
"fmt"
"os"
"os/exec"
"syscall"
)
func main() {
source := "133.133.133.182:/usr/local/sbin/etc/amf"
destination := "/usr/local/sbin/etc/amf"
cmd := exec.Command("rsync", "-avz", "--delete", source, destination)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
// 创建管道连接到命令的标准输入
stdin, err := cmd.StdinPipe()
if err != nil {
fmt.Println(err)
return
}
go func() {
defer stdin.Close()
password := "your_password\n" // 替换为您的实际密码
stdin.Write([]byte(password))
}()
err = cmd.Start()
if err != nil {
fmt.Println(err)
return
}
err = cmd.Wait()
if exitError, ok := err.(*exec.ExitError); ok {
if status, ok := exitError.Sys().(syscall.WaitStatus); ok {
fmt.Printf("Exited with status %d\n", status.ExitStatus())
}
}
fmt.Println("rsync completed successfully")
}
在上述代码中,我们使用了一个匿名函数,在其中通过管道向命令的标准输入写入密码。
请注意,此处的password
变量应替换为您实际的密码,并以换行符结尾(\n
)。
另外,还展示了如何捕获命令的退出状态。您可以根据需要进行相应的处理。
希望这个示例对您有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问