Go:执行bash脚本

时间:2015-01-04 11:44:40

标签: bash go

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

目录结构:

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

  hello.go
  hello.sh

hello.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但是,我不确定我是否正确道路。非常感谢帮助!

3 个答案:

答案 0 :(得分:3)

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)
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

上的示例

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

var out bytes.Buffer
cmd.Stdout = &out

然后,您可以使用

运行命令
cmd.Run() 

如果执行正常(意味着它返回nil),则命令的输出将在out缓冲区中,其字符串版本可以通过

获得
out.String()