为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼如林 2023-07-04 15:03:25
我有一个非常简单的 Go 应用程序,名为myApp,它应该在 macOS 上启动一个新的终端窗口:package mainimport (    "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 && myAppexit status 1open -a Terminal /Users/ns/go/如果我在终端中手动运行命令 ( ),它就会起作用。我缺少什么?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

来自文档:

与 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", ...)


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信