我有一个非常简单的 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", ...)
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消