在Golang中具有输入重定向的Shell out diff

在Golang中具有输入重定向的Shell out diff,shell,go,Shell,Go,我正试图推出类似的产品: diff <(echo -e "$string1" ) <(echo -e "$string2") 这会给我一些结果,比如:diff:\“foo\nbar\nbaz\”:没有这样的文件或目录 差异:“foo\n文件\nbaz\”:没有这样的文件或目录 更复杂的版本仍然不起作用: func Diff(str1, str2 string) (string, error) { cmd := exec.Command("diff") stdin,

我正试图推出类似的产品:

diff  <(echo -e "$string1" ) <(echo -e "$string2")
这会给我一些结果,比如:
diff:\“foo\nbar\nbaz\”:没有这样的文件或目录
差异:“foo\n文件\nbaz\”:没有这样的文件或目录

更复杂的版本仍然不起作用:

func Diff(str1, str2 string) (string, error) {
    cmd := exec.Command("diff")
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return "", err
    }
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return "", err
    }
    err = cmd.Start()
    if err != nil {
        return "", err
    }
    io.WriteString(stdin, echoString(str1))
    io.WriteString(stdin, echoString(str2))
    bytes, err := ioutil.ReadAll(stdout)
    cmd.Wait()
    result := string(bytes)
    if err != nil {
        switch err.(type) {
        case *exec.ExitError:
            return result, nil
        default:
            return "", nil
        }
    }
    return result, nil
}

func echoString(str string) string {
    return fmt.Sprintf(`<( echo -e "%s" )`, strings.Replace(str, `"`, `\"`, -1))
}
func Diff(str1,str2字符串)(字符串,错误){
cmd:=exec.Command(“diff”)
stdin,err:=cmd.StdinPipe()
如果错误!=零{
返回“”,错误
}
stdout,err:=cmd.StdoutPipe()
如果错误!=零{
返回“”,错误
}
err=cmd.Start()
如果错误!=零{
返回“”,错误
}
io.WriteString(标准输入法、echoString(标准输入法))
io.WriteString(标准输入法、echoString(标准输出法))
字节,错误:=ioutil.ReadAll(stdout)
cmd.Wait()
结果:=字符串(字节)
如果错误!=零{
开关错误。(类型){
案例*exec.exit:
返回结果,无
违约:
返回“”,无
}
}
返回结果,无
}
func echoString(str字符串)字符串{

返回fmt.Sprintf(`这里是最简单的解决方案,只需将
diff
命令传递给
bash
shell:

    cmd := exec.Command(
        "bash", "-c", 
        fmt.Sprintf("diff <(echo -e %s) <(echo -e %s)", str1, str2))
cmd:=exec.Command(
“bash”、“-c”,

fmt.Sprintf(“diff这里是最简单的解决方案,只需将
diff
命令传递给
bash
shell:

    cmd := exec.Command(
        "bash", "-c", 
        fmt.Sprintf("diff <(echo -e %s) <(echo -e %s)", str1, str2))
cmd:=exec.Command(
“bash”、“-c”,

fmt.Sprintf(“diff如果您粘贴代码和错误消息,我们可能可以帮助您更好地添加我尝试过的最简单的版本。diff命令需要文件作为其参数,而不仅仅是字符串,所以这就是为什么您会得到错误的原因我知道,我也不希望简单的版本能够工作,但我在stdin上做了手脚,可以找不到在Go中对shell输入重定向进行编码的方法。第二个版本的问题是
如果您粘贴代码和错误消息,我们可能可以帮助您更好地添加我尝试过的最简单的版本。嗯,diff命令希望将文件作为其参数,而不仅仅是字符串,所以这就是为什么您会遇到错误gettingI知道,我也不希望这个简单的版本能够工作,但是我在stdin上做了手脚,找不到在Go中编写shell输入重定向的方法。第二个版本的问题是
Ah,聪明!我只是将整个diff命令作为字符串传递给bash。很好的发现!啊,聪明!我只是将整个diff命令作为字符串传递给bash哦,巴什,很好的发现!