os.Exec 和 /bin/sh:执行多个命令
os.Exec and /bin/sh: executing multiple commands
我 运行 遇到了 os/exec
库的问题。我想 运行 一个 shell 并将多个命令传递给 运行,但是当我这样做时它失败了。这是我的测试代码:
package main
import (
"fmt"
"os/exec"
)
func main() {
fmt.Printf("-- Test 1 --\n`")
command1 := fmt.Sprintf("\"%s\"", "pwd") // this one succeeds
fmt.Printf("Running: %s\n", command1)
cmd1 := exec.Command("/bin/sh", "-c", command1)
output1,err1 := cmd1.CombinedOutput()
if err1 != nil {
fmt.Printf("error: %v\n", err1)
return
}
fmt.Printf(string(output1))
fmt.Printf("-- Test 2 --\n")
command2 := fmt.Sprintf("\"%s\"", "pwd && pwd") // this one fails
fmt.Printf("Running: %s\n", command2)
cmd2 := exec.Command("/bin/sh", "-c", command2)
output2,err2 := cmd2.CombinedOutput()
if err2 != nil {
fmt.Printf("error: %v\n", err2)
return
}
fmt.Printf(string(output2))
}
当 运行 执行此操作时,我在第二个示例中收到错误 127。它似乎在寻找文字 "pwd && pwd" 命令而不是将其作为脚本进行评估。
如果我从命令行执行相同的操作,它就可以正常工作。
$ /bin/sh -c "pwd && pwd"
我在 OS X 10.10.2 上使用 Go 1.4。
这些引号是针对您的 shell 您键入命令行的位置,在以编程方式启动应用程序时不应包含它们
只需进行此更改即可生效:
command2 := "pwd && pwd" // you don't want the extra quotes
我 运行 遇到了 os/exec
库的问题。我想 运行 一个 shell 并将多个命令传递给 运行,但是当我这样做时它失败了。这是我的测试代码:
package main
import (
"fmt"
"os/exec"
)
func main() {
fmt.Printf("-- Test 1 --\n`")
command1 := fmt.Sprintf("\"%s\"", "pwd") // this one succeeds
fmt.Printf("Running: %s\n", command1)
cmd1 := exec.Command("/bin/sh", "-c", command1)
output1,err1 := cmd1.CombinedOutput()
if err1 != nil {
fmt.Printf("error: %v\n", err1)
return
}
fmt.Printf(string(output1))
fmt.Printf("-- Test 2 --\n")
command2 := fmt.Sprintf("\"%s\"", "pwd && pwd") // this one fails
fmt.Printf("Running: %s\n", command2)
cmd2 := exec.Command("/bin/sh", "-c", command2)
output2,err2 := cmd2.CombinedOutput()
if err2 != nil {
fmt.Printf("error: %v\n", err2)
return
}
fmt.Printf(string(output2))
}
当 运行 执行此操作时,我在第二个示例中收到错误 127。它似乎在寻找文字 "pwd && pwd" 命令而不是将其作为脚本进行评估。
如果我从命令行执行相同的操作,它就可以正常工作。
$ /bin/sh -c "pwd && pwd"
我在 OS X 10.10.2 上使用 Go 1.4。
这些引号是针对您的 shell 您键入命令行的位置,在以编程方式启动应用程序时不应包含它们
只需进行此更改即可生效:
command2 := "pwd && pwd" // you don't want the extra quotes