os.Exec和/ bin / sh:执行多个命令

I've run into an issue with the os/exec library. I want to run a shell and pass it multiple commands to run, but it's failing when I do. Here's my test code:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    fmt.Printf("-- Test 1 --
`")
    command1 := fmt.Sprintf("\"%s\"", "pwd") // this one succeeds
    fmt.Printf("Running: %s
", command1)
    cmd1 := exec.Command("/bin/sh", "-c", command1)
    output1,err1 := cmd1.CombinedOutput()
    if err1 != nil {
        fmt.Printf("error: %v
", err1)
        return
    }
    fmt.Printf(string(output1))


    fmt.Printf("-- Test 2 --
")
    command2 := fmt.Sprintf("\"%s\"", "pwd && pwd") // this one fails
    fmt.Printf("Running: %s
", command2)
    cmd2 := exec.Command("/bin/sh", "-c", command2)
    output2,err2 := cmd2.CombinedOutput()
    if err2 != nil {
        fmt.Printf("error: %v
", err2)
        return
    }
    fmt.Printf(string(output2))
}

When running this I get an error 127 on the second example. It seems like it's looking for a literal "pwd && pwd" command instead of evaluating it as a script.

If I do the same thing from the command line it works just fine.

$ /bin/sh -c "pwd && pwd"

I'm using Go 1.4 on OS X 10.10.2.

the quotes are for your shell where you typed the command line, they should not be included when programatically launching an app

just make this change and it will work:

command2 := "pwd && pwd" // you don't want the extra quotes