[英]Complex command in exec.Command()
我想执行这个命令:
docker exec -it demoContainer bash -c "pip freeze" > "requirements.txt"
但是找不到任何带有管道的复杂命令的示例,并且 output 写道。
我试过这个:
cmd := exec.Command("docker", "exec -it demoContainer bash -c \"pip freeze\" > \"requirements.txt\"")
_, err = cmd.CombinedOutput()
和:
cmd := exec.Command("docker", "exec", "-it", "demoContainer", "bash", "-c", "pip freeze", ">", "scheduleDeploy/requirements.txt")
_, err = cmd.CombinedOutput()
但总是因以下 output 而崩溃:
Error: Exit status 1
编辑
带有答案想法的更新:
err = exec.Command("sh", "-c","'docker exec -it demoContainer bash -c 'pip freeze' > 'requirements.txt''").Run()
Output:
Exit error status 2
>
重定向是“shell”的东西,而不是“exec”的东西。 您将需要执行“使用要执行的命令运行 bash”或“打开文件,将生成的 os.File 设置为 exec.Command 的标准输出,然后再启动它”之一。
要么可能会解决您面临的问题。
要使用“bash -c”版本,例如:
exec.Command("bash", "-c", `docker exec -it demoContainer bash -c "pip freeze" > requirements.txt`)
您不必使用 shell 进行重定向,您可以让 Go 执行此操作:
package main
import (
"os"
"os/exec"
)
func main() {
f, e := os.Create("requirements.txt")
if e != nil {
panic(e)
}
defer f.Close()
c := exec.Command(
"docker", "exec", "-it", "demoContainer", "bash", "-c", "pip freeze",
)
c.Stdout = f
c.Run()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.