执行shell命令
前言
go语言执行shell命令主要依靠os/exec
包。
单纯运行命令
func cmdOnly(cmd string) {
// 只运行命令
cmdTmp := exec.Command("bash","-c",cmd)
if err := cmdTmp.Run(); err != nil {
fmt.Println(err)
}
}
func main() {
for i := 0; i < 10; i++ {
// 使用fmt.Sprintf()拼接字符串
cmd := fmt.Sprintf("echo '00%d' >> hello.txt",i)
cmdOnly(cmd)
}
}
运行命令并获取返回值
func cmdGetReturn(cmd string) string {
// 执行shell命令并获取返回值
cmdTmp := exec.Command("bash", "-c", cmd)
rst, err := cmdTmp.CombinedOutput()
if err != nil {
fmt.Println(err)
}
return string(rst)
}
func main() {
fmt.Println(cmdGetReturn("ls"))
}
运行命令并获取返回值,区分stdout和stderr
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "-l", "/var/log/*.log")
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout // 标准输出
cmd.Stderr = &stderr // 标准错误
err := cmd.Run()
outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes())
fmt.Printf("out:\n%s\nerr:\n%s\n", outStr, errStr)
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
}