运行'找到'使用exec.Command

时间:2015-06-29 19:37:43

标签: go

我正在尝试使用find运行exec.Command命令:

cmd := exec.Command("find", "/usr/bin", "-maxdepth", 
        "2", "-iname", "'*go*'", "|", "head", "-10")
out, err := cmd.CombinedOutput()
fmt.Println(err)
fmt.Println(string(out))

不幸的是,这失败了以下输出:

exit status 1
find: paths must precede expression: |
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我在这里缺少什么?

编辑:

即使我在没有管道的情况下尝试它仍然会失败:

cmd := exec.Command("find", "/usr/bin", "-maxdepth", "2", "-iname", "'*go*'")
out, err := cmd.CombinedOutput()
fmt.Println(err)
fmt.Println(string(out))

输出:

<nil>

1 个答案:

答案 0 :(得分:2)

您正在使用|将上一个命令的输出传递到下一个命令。相反,你可能需要Go中的两个命令。使用string(out)作为第二个输入,而不是尝试管道它并将两个bash命令组合成一个Go命令。

// this is pseudo code
cmd2 := exec.Command("head", "args1", string(out))

基本上,您必须自己进行管道并使用两个单独的命令,而不是尝试使用管道组成的命令调用一次命令。