You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go语言程序中执行Ubuntu终端命令?

在Ubuntu的Go程序中执行终端命令

当然可以!在Go语言里执行Ubuntu终端命令是非常常见的操作,完全不需要额外安装依赖,靠Go标准库的os/exec包就能搞定。我给你分享几种实用的场景和代码示例:

1. 基础执行命令(不捕获输出)

如果只是想执行一个命令,比如mkdir或者rm,不需要获取它的输出,直接用Run()方法就行:

package main

import (
    "log"
    "os/exec"
)

func main() {
    // 定义要执行的命令,第一个参数是命令名,后面是可选参数
    cmd := exec.Command("mkdir", "new_project_folder")
    // 执行命令
    err := cmd.Run()
    if err != nil {
        log.Fatalf("命令执行失败: %v", err)
    }
}

2. 捕获命令的标准输出

如果需要获取命令执行后的结果(比如df -h查看磁盘使用情况),可以用Output()方法,它会返回命令的标准输出字节流:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    // 执行带参数的磁盘查看命令
    cmd := exec.Command("df", "-h")
    // 获取输出
    output, err := cmd.Output()
    if err != nil {
        log.Fatalf("命令执行失败: %v", err)
    }
    // 将字节数组转为字符串并打印
    fmt.Println("磁盘使用情况:\n", string(output))
}

3. 执行Shell内置命令或组合命令

有些命令是Shell的内置命令(比如cd、echo),或者需要用管道、&&这类Shell语法组合命令,这时候需要通过bash -c来执行:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    // 执行组合命令:查看当前目录下的txt文件并统计数量
    cmd := exec.Command("bash", "-c", "ls *.txt | wc -l")
    // CombinedOutput会同时捕获标准输出和错误输出,方便排查问题
    output, err := cmd.CombinedOutput()
    if err != nil {
        log.Fatalf("命令执行失败: %v\n错误输出: %s", err, output)
    }
    fmt.Println("当前目录下的txt文件数量:", string(output))
}

几个重要注意事项

  • 避免命令注入:永远不要直接把用户输入拼接成命令字符串,一定要用exec.Command的参数列表形式(比如exec.Command("echo", userInput)而不是exec.Command("bash", "-c", "echo "+userInput)),防止恶意输入触发危险命令。
  • 环境变量控制:如果需要自定义命令执行的环境变量,可以修改cmd.Env字段,比如cmd.Env = append(os.Environ(), "MY_VAR=custom_value")。
  • 错误处理:命令执行失败时,err会包含详细的错误信息,结合CombinedOutput能看到命令本身的错误输出,有助于快速定位问题。

内容的提问来源于stack exchange,提问作者Coding4Life

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:48:30