你如何从 Golang 执行终端命令?

我正在 Golang 中创建一个 CLI 工具,我对 Golang 和为终端制作工具都是新手。我需要直接从我的程序(特别是cd)执行终端命令。我该怎么做呢?我跟着这篇文章,但它抛出了一个错误,说在 %path% 中找不到回声

在此先感谢您的帮助!


蝴蝶刀刀
浏览 220回答 4
4回答

郎朗坤

cd通过调用os.Chdir来实现命令。由于子进程无法更改父进程的工作目录,因此该cd命令没有单独的可执行文件。该cd命令内置于命令行解释器。

长风秋雁

os/exec包帮助你在 Go 中执行终端命令。执行系统命令非常简单。Cmd 保存您的外部命令。所以在 linux 中假设你想运行“echo hello”命令,你会写下面的代码。cmdStruct := exec.Command("echo","hello")    out,err := cmdStruct.Output()if err != nil {    fmt.Println(err)}fmt.Println(string(out))这是最基本的方法之一。但是,在 Windows 中,您需要将“echo hello”作为参数传递给命令提示符或 Powershell。    cmdStruct:= exec.Command("cmd.exe","/c","echo","hello")为了简化单个切片中的传递参数,args:= strings.Split("/c echo hello there how are you"," ")cmdStruct:= exec.Command("cmd.exe",args...)查看此答案以获得更好的理解和此代码的增强版本。对于 cd,您可以使用os.Chdir()和os.Getwd()分别更改和查看您的工作目录。但是如果你需要你的命令在特定目录中执行,你可以设置Dir你的命令,即cmdStruct.Dir = "path/to/directory"或者cmdStruct.Dir = filepath.Join("path","to","directory")

慕仙森

cd 不是外部程序。命令行解释器有一个抽象“当前目录”,它影响所有其他命令。它是一个状态例如,它用于处理相对路径。如果您想从头开始创建 CLI,则必须定义此阶段如何影响一切。如果您需要与现有 CLI 进行交互,则需要在操作系统进程中启动它并通过流进行交互。有3个流:STDIN - 输入 STDOUT - 输出 STDERR - 错误您需要捕获用户命令并发送到 CLI 的 STDIN。并读取 STDIN / STDOUT 以写入响应。例如,这与 goroutines 有关

眼眸繁星

尽管我问这个问题已经有一段时间了,但我认为回答这个问题会很好。简单来说,没有办法。程序基本上在它们自己的小盒子上运行,这意味着虽然 os.Chdir() 确实在技术上改变了工作目录,但它之后“恢复”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go