[英]exec.command for patch command
我正在尝试使用以下命令修补文件
patch -p0 < <file_path>
我的runCommand语法如下:
func runCommand(cmd string, args ...string) error {
ecmd := exec.Command(cmd, args...)
ecmd.Stdout = os.Stdout
ecmd.Stderr = os.Stderr
ecmd.Stdin = os.Stdin
err := ecmd.Run()
return err
}
现在,我通过如下的patch命令:
cmd = "patch"
args := []string{"-p0", "<", "/tmp/file"}
err = runCommand(cmd, args...)
但我看到以下错误:
补丁:****找不到文件“ <”:没有这样的文件或目录
您能告诉我我在这里想念的吗?
您在文档中缺少此段:
与使用C和其他语言进行“系统”库调用不同,os / exec软件包有意不调用系统外壳程序,并且不展开任何glob模式或处理其他通常由外壳程序完成的扩展,管线或重定向。 程序包的行为更像C的“ exec”函数系列。 要扩展glob模式,请直接调用外壳程序,注意避免任何危险的输入,或者使用path / filepath包的Glob函数。 要扩展环境变量,请使用程序包的ExpandEnv。
外壳负责处理<
操作。 您可以使用文件将stdin
设置为输入,也可以使用shell。 要使用外壳,请尝试以下操作:
runCommand("/bin/sh", "patch -p0 < /tmp/file")
请注意,这在Windows上不起作用。 读取文件并自己写到stdin
是一种更容易移植的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.