尝试从 Go 应用程序启动终端时出现“退出状态 1”

我有一个非常简单的 Go 应用程序,名为myApp,它应该在 macOS 上启动一个新的终端窗口:


package main


import (

    "fmt"

    "os/exec"

)


func main() {

    err := exec.Command("open", "-a", "Terminal", "/Users/ns/go/").Run()

    if err != nil {

        fmt.Println(err)

    }

}

但是,当我运行该应用程序时,我得到以下输出:


ns:~/go/src/github.com/nevadascout/myApp $ go install && myApp

exit status 1

open -a Terminal /Users/ns/go/如果我在终端中手动运行命令 ( ),它就会起作用。

我缺少什么?


呼如林
浏览 95回答 1
1回答

侃侃无极

来自文档:与 C 和其他语言的“系统”库调用不同,os/exec 包有意不调用系统 shell,也不扩展任何 glob 模式或处理通常由 shell 完成的其他扩展、管道或重定向。该包的行为更像是 C 的“exec”函数系列。要扩展 glob 模式,请直接调用 shell,注意转义任何危险输入,或使用 path/filepath 包的 Glob 函数。要扩展环境变量,请使用 os 包的 ExpandEnv。因此,您需要运行bash -c命令并将上述命令作为参数传递。像这样的东西:exec.Command("bash", "-c", "open", "-a", "Terminal", "~/go/").Run()对于 Windows,您应该使用cmd /C. 例子:exec.Command("cmd", "/C", ...)
打开App,查看更多内容
随时随地看视频慕课网APP