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

时间:2019-07-14 09:49:38

标签: macos go terminal

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

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/),它将起作用。
我想念什么?

1 个答案:

答案 0 :(得分:1)

来自docs

  

与使用C和其他语言进行的“系统”库调用不同,os / exec软件包有意不调用系统外壳程序,也不扩展任何glob模式或处理其他通常由外壳程序完成的扩展,管道或重定向。程序包的行为更像C的“ exec”函数系列。要扩展glob模式,请直接调用外壳程序,注意避免任何危险的输入,或者使用path / filepath包的Glob函数。要扩展环境变量,请使用软件包os的ExpandEnv。

因此,您需要运行bash -c命令并将上述命令作为参数传递。像这样:

exec.Command("bash", "-c", "open", "-a", "Terminal", "~/go/").Run()

对于Windows,您应该使用cmd /C。示例:

exec.Command("cmd", "/C", ...)