golang跨平台执行Shell命令插件库cmd的使用
Golang跨平台执行Shell命令插件库cmd的使用
cmd包简介
cmd包是一个简单的包,用于在Linux、Darwin和Windows上执行shell命令。
安装
使用以下命令安装最新版本:
$ go get -u github.com/commander-cli/cmd
或者安装特定版本:
$ go get -u github.com/commander-cli/cmd@v1.0.0
基本用法
// 创建一个新命令
c := cmd.NewCommand("echo hello")
// 执行命令
err := c.Execute()
if err != nil {
panic(err.Error())
}
// 输出命令的标准输出和标准错误
fmt.Println(c.Stdout())
fmt.Println(c.Stderr())
配置命令
可以通过传递一个选项函数来配置命令,该函数接收命令对象作为引用传递的参数。
默认选项函数
cmd.WithCustomBaseCommand(*exec.Cmd)
cmd.WithStandardStreams
cmd.WithCustomStdout(...io.Writers)
cmd.WithCustomStderr(...io.Writers)
cmd.WithTimeout(time.Duration)
cmd.WithoutTimeout
cmd.WithWorkingDir(string)
cmd.WithEnvironmentVariables(cmd.EnvVars)
cmd.WithInheritedEnvironment(cmd.EnvVars)
示例
// 使用标准流
c := cmd.NewCommand("echo hello", cmd.WithStandardStreams)
c.Execute()
设置自定义选项
// 自定义工作目录
setWorkingDir := func (c *Command) {
c.WorkingDir = "/tmp/test"
}
// 创建命令并执行
c := cmd.NewCommand("pwd", setWorkingDir)
c.Execute()
完整示例Demo
下面是一个完整的示例,展示如何使用cmd包执行命令并处理输出:
package main
import (
"fmt"
"time"
"github.com/commander-cli/cmd"
)
func main() {
// 示例1: 基本命令执行
c1 := cmd.NewCommand("echo 'Hello, World!'")
err := c1.Execute()
if err != nil {
fmt.Printf("命令执行失败: %v\n", err)
return
}
fmt.Printf("输出: %s\n", c1.Stdout())
// 示例2: 带超时的命令
c2 := cmd.NewCommand("sleep 5", cmd.WithTimeout(2*time.Second))
err = c2.Execute()
if err != nil {
fmt.Printf("命令执行失败(预期中): %v\n", err)
}
// 示例3: 设置工作目录
c3 := cmd.NewCommand("pwd", func(c *cmd.Command) {
c.WorkingDir = "/tmp"
})
err = c3.Execute()
if err != nil {
fmt.Printf("命令执行失败: %v\n", err)
return
}
fmt.Printf("当前工作目录: %s\n", c3.Stdout())
// 示例4: 捕获标准错误
c4 := cmd.NewCommand("ls /nonexistent")
err = c4.Execute()
if err != nil {
fmt.Printf("命令执行失败: %v\n", err)
fmt.Printf("错误输出: %s\n", c4.Stderr())
}
}
贡献指南
如果你想贡献代码,请提交pull request。对于bug修复/小的更改,一个简单的pull request就足够了。如果更改较大或希望在实现之前进行功能讨论,请随时开一个issue。
开发
请fork项目并在那里进行开发。请使用有意义的分支名称,并遵守commitlint规则。
如果要运行预提交钩子:
make init
运行测试套件:
make test
提醒: 本项目的目标是尽可能抽象特定于操作系统的命令执行。确保你的更改与Linux、Windows和OSX兼容。
更多关于golang跨平台执行Shell命令插件库cmd的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复