【问题标题】:Go: execute bash scriptGo:执行 bash 脚本
【发布时间】:2015-03-02 03:23:57
【问题描述】:

如何从我的 Go 程序执行 bash 脚本?这是我的代码:

目录结构:

/hello/
  public/
    js/
      hello.js
  templates
    hello.html

  hello.go
  hello.sh

你好.go

cmd, err := exec.Command("/bin/sh", "hello.sh")
  if err != nil {
    fmt.Println(err)
}

当我运行 hello.go 并调用相关路由时,我会在控制台上看到这个:

exit status 127 output is

我期待 ["a", "b", "c"]

我知道在 SO:Executing a Bash Script from Golang 上有一个类似的问题,但是,我不确定我的路径是否正确。将不胜感激!

【问题讨论】:

    标签: bash go


    【解决方案1】:

    exec.Command() 返回一个可用于其他命令的结构,例如Run

    如果你只是在寻找命令的输出,试试这个:

    package main
    
    import (
        "fmt"
        "log"
        "os/exec"
    )
    
    func main() {
        out, err := exec.Command("date").Output()
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("The date is %s\n", out)
    }
    

    【讨论】:

      【解决方案2】:

      您也可以使用 CombinedOutput() 代替 Output()。它将转储执行命令的标准错误结果,而不仅仅是返回错误代码。 看: How to debug "exit status 1" error when running exec.Command in Golang

      【讨论】:

        【解决方案3】:

        查看http://golang.org/pkg/os/exec/#Command的示例

        您可以尝试使用输出缓冲区并将其分配给您创建的 cmd 的标准输出,如下所示:

        var out bytes.Buffer
        cmd.Stdout = &out
        

        然后您可以使用

        运行命令
        cmd.Run() 
        

        如果执行良好(意味着它返回 nil),命令的输出将在 out 缓冲区中,可以使用

        获得其字符串版本
        out.String()
        

        【讨论】:

          猜你喜欢
          • 2016-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-10
          • 2013-07-13
          • 2011-08-09
          • 2014-11-08
          • 2013-04-19
          相关资源
          最近更新 更多