【发布时间】:2021-10-02 09:33:03
【问题描述】:
我想使用 golang 运行这个命令,如何使用 exec.Command 来实现它
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
请任何人帮助我
谢谢 迈克
【问题讨论】:
标签: go
我想使用 golang 运行这个命令,如何使用 exec.Command 来实现它
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
请任何人帮助我
谢谢 迈克
【问题讨论】:
标签: go
您不能将作为 shell 构造的管道作为命令行参数传递。
您可以使用-c string 选项执行bash 以执行string 中的命令。
str := "mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name"
output, err := exec.Command("bash", "-c", str).Output()
if err != nil {
panic(err)
}
fmt.Println(string(output))
或者您可以使用(*exec.Cmd).StdoutPipe 将一个命令的输出通过管道传输到另一个命令的输入。
c1 := exec.Command("mysqldump", "-u", "root", "-p", "database_name")
out, err := c1.StdoutPipe()
if err != nil {
panic(err)
}
c2 := exec.Command("mysql", "-h", "remote_host", "-u", "root", "-p", "remote_database_name")
c2.Stdin = out
if err := c2.Start(); err != nil {
panic(err)
}
if err := c1.Run(); err != nil {
panic(err)
}
if err := c2.Wait(); err != nil {
panic(err)
}
【讨论】:
您在下面尝试了吗?参考here。
package main
import (
"log"
"os/exec"
)
func main() {
cmd := exec.Command("mysqldump", "-u", "root", "-p", "database_name", "|", "mysql", "-h", "remote_host", "-u", "root", "-p", "remote_database_name")
err := cmd.Run()
if err != nil {
log.Printf("Command finished with error: %v", err)
}
}
【讨论】: