繁体   English   中英

修补程序命令的exec.command

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM