Go: 执行 bash 脚本
Go: execute bash script
如何从我的 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,但是,我不确定我的路径是否正确。将不胜感激!
查看 http://golang.org/pkg/os/exec/#Command
中的示例
您可以尝试使用输出缓冲区并将其分配给您创建的 cmd 的 Stdout,如下所示:
var out bytes.Buffer
cmd.Stdout = &out
然后您可以 运行 使用
命令
cmd.Run()
如果执行正常(意味着它 returns nil),命令的输出将在 out
缓冲区中,其字符串版本可以通过
获得
out.String()
exec.Command()
returns 可用于其他命令的结构,例如 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)
}
您也可以使用 CombinedOutput() 而不是 Output()。它将转储已执行命令的标准错误结果,而不仅仅是返回错误代码。
看:
How to debug "exit status 1" error when running exec.Command in Golang
如何从我的 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,但是,我不确定我的路径是否正确。将不胜感激!
查看 http://golang.org/pkg/os/exec/#Command
中的示例您可以尝试使用输出缓冲区并将其分配给您创建的 cmd 的 Stdout,如下所示:
var out bytes.Buffer
cmd.Stdout = &out
然后您可以 运行 使用
命令cmd.Run()
如果执行正常(意味着它 returns nil),命令的输出将在 out
缓冲区中,其字符串版本可以通过
out.String()
exec.Command()
returns 可用于其他命令的结构,例如 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)
}
您也可以使用 CombinedOutput() 而不是 Output()。它将转储已执行命令的标准错误结果,而不仅仅是返回错误代码。 看: How to debug "exit status 1" error when running exec.Command in Golang