Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 有没有办法将bash脚本中的stdout存储到GO中的变量中?_Linux_Bash_Go - Fatal编程技术网

Linux 有没有办法将bash脚本中的stdout存储到GO中的变量中?

Linux 有没有办法将bash脚本中的stdout存储到GO中的变量中?,linux,bash,go,Linux,Bash,Go,我正在运行一个非常简单的bash脚本,其中只包含一些Go中的数据。我已经将其放入包装器中,并使用exec包来执行它。通过输出到我的终端,这可以很好地工作,但是,我找不到任何方法将其实际存储到Go中的变量中 我是新手,所以我的调试技能并不惊人。然而,我已经放置了一些基本的日志输出,试图缩小我需要从哪里获得输出的范围,但是没有用 运行bash的两个函数: func main(){ _,结果,\:=runBash() log.Printf(“结果:,结果) } func runBash()(bool,

我正在运行一个非常简单的bash脚本,其中只包含一些Go中的数据。我已经将其放入包装器中,并使用exec包来执行它。通过输出到我的终端,这可以很好地工作,但是,我找不到任何方法将其实际存储到Go中的变量中

我是新手,所以我的调试技能并不惊人。然而,我已经放置了一些基本的日志输出,试图缩小我需要从哪里获得输出的范围,但是没有用

运行bash的两个函数:

func main(){
_,结果,\:=runBash()
log.Printf(“结果:,结果)
}
func runBash()(bool,string,string){
cmd:=exec.Command(“/bin/sh”,“-s”)
cmd.Stdin=strings.NewReader(replicateRouter())
返回精加工(cmd)
}
func finishRunning(cmd*exec.cmd)(bool,string,string){
log.Printf(“正在运行:)
stdout,stderr:=bytes.NewBuffer(nil),bytes.NewBuffer(nil)
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
完成:=make(chan结构{})
延迟关闭(完成)
go func(){
为了{
挑选{
案例问题1:

在代码中,stdout和stderr从未分配给cmd

试试这个:

cmd.Stdout = stdout
cmd.Stderr = stderr
或者,尝试以下更简单的版本:

  func main() {
      out, err := exec.Command("date").Output()
      if err != nil {
          log.Fatal(err)
      }
      fmt.Printf("The date is %s\n", out)
  }
最后,您可以“代理”到os.Stdout

package main

import (
    "bytes"
    "fmt"
    "os/exec"
    "io"
    "os"
)


func main() {
    stdout := new(bytes.Buffer)
    stderr := new(bytes.Buffer)
    _, _ = io.Copy(os.Stdout, stdout)
    _, _ = io.Copy(os.Stderr, stderr)

    cmd  := exec.Command("date")
    cmd.Stdout = stdout
    cmd.Stderr = stderr
    cmd.Run()



    output := string(stdout.Bytes())
    fmt.Printf("The date is %s\n", output)
}

打字错误?使用stderr和stdout而不是os.stderr和os.Stdin。是的。一旦我删除了os.stderr/&Stdin并替换了它们,它马上就可以工作了。我想使用os.stderr/in是如何在Go中不使用logging/fmt而将其打印到终端上。但是我们每天都会学到一些新的东西:)非常感谢,你是对的,我忘了o在我的代码中的任何地方分配stdout和stderr。现在我这样做了,我能够成功地将其放入结果中。我将尝试另一种方法。再次感谢,这让我非常痛苦!