为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕尼黑的夜晚无繁华 2021-09-13 15:12:45
我遇到了os/exec图书馆的问题。我想运行一个 shell 并向它传递多个命令来运行,但是当我这样做时它失败了。这是我的测试代码:package mainimport (    "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。
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

引号适用于您在其中键入命令行的 shell,在以编程方式启动应用程序时不应包含它们

只需进行此更改,它就会起作用:

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


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信