gpt4 book ai didi

shell - 管道命令并使用命令重定向输出

转载 作者:IT王子 更新时间:2023-10-29 02:08:21 25 4
gpt4 key购买 nike

这是我的代码:

package main

import (
"fmt"
"os"
"os/exec"
"strconv"
"time"
)

func main() {
year, month, day := time.Now().Date()
monthI := int(month)
fmt.Println("toto")
date := strconv.Itoa(year)+"_"+strconv.Itoa(monthI)+"_"+strconv.Itoa(day)
nameSnapshot := "storedb@backup_"+date
args := []string{"snapshot",nameSnapshot}
cmd := exec.Command("zfs", args...)
err := cmd.Run()
if err != nil {
os.Stderr.WriteString(err.Error())
}
args = []string{"send",nameSnapshot,"|","gzip",">","backup_"+date+".gz"}
cmd = exec.Command("zfs", args...)
err = cmd.Run()
if err != nil {
os.Stderr.WriteString(err.Error())
}


}

我想用一条命令完成。

我的第二行 zfs send 命令似乎不起作用。

如何使用 cmd.exec 对 golang 中的输出进行管道和重定向?

最佳答案

这是实现此目的的简化版本:

outfile, _ := os.OpenFile("backup.gz", os.O_RDWR|os.O_CREATE, 0755)

// your zfs command
zfs := exec.Command("zfs", "send", "storedb@backup")
gzip := exec.Command("gzip", "-cf") // gzip to stdout (-cf)
gzip.Stdin, _ = zfs.StdoutPipe() // zfs stdout to gzip stdin
gzip.Stdout = outfile // write output of gzip to outfile
gzip.Start() // gzip start waiting for input
zfs.Run() // zfs start command
gzip.Wait() // gzip wait for pipe to close
outfile.Close()

它等同于shell中的这条命令:

zfs send stored@backup | gzip -cf > backup.gz

关于shell - 管道命令并使用命令重定向输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53350657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com