duanbishai5271 2012-07-24 02:22
浏览 729
已采纳

Go语言的exec.Command方法执行失败

package main

import (
    "os/exec"
    "fmt"
)

func main(){
    cmd := exec.Command("find", "/home/d101270c/cbe", "-name","*.log", ">", "log.txt")
    fmt.Println(cmd)
    err := cmd.Run()
    if err != nil {
        fmt.Printf("%s
", err)
        return
    }
}

Run result:

<1067 linux20 [d101270c] :/home/d101270c>uname -a
Linux linux20 2.6.16.60-0.21-smp #1 SMP Tue May 6 12:41:02 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
<1068 linux20 [d101270c] :/home/d101270c>tgo
&{/usr/bin/find [find /home/d101270c/cbe -name *.log > log.txt] []  <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> false [] [] [] [] <nil>}
exit status 1

This command execute failed, and no log.txt exists.

Why?

  • 写回答

2条回答 默认 最新

  • douguanya4248 2012-07-24 05:34
    关注

    You're passing find arguments like `>', which it doesn't understand, but the shell does. This works for me:

    (07:28) jnml@tsat:~/src/tmp/SO/11623232$ cat main.go 
    package main
    
    import (
        "fmt"
        "os"
        "os/exec"
    )
    
    func main() {
        //cmd := exec.Command("sh", "-c", "find /home/d101270c/cbe -name \\*.log > log.txt")
        cmd := exec.Command("sh", "-c", "find "+os.Getenv("HOME")+"/src -name \\*.go > go.txt")
        fmt.Println(cmd)
        err := cmd.Run()
        if err != nil {
            fmt.Printf("%s
    ", err)
            return
        }
    }
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ go build main.go 
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ ./main 
    &{/bin/sh [sh -c find /home/jnml/src -name \*.go > go.txt] []  <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> false [] [] [] [] <nil>}
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ ls -l
    celkem 1408
    -rw-r--r-- 1 jnml jnml    7845 2012-07-24 07:29 go.txt
    -rwxr-xr-x 1 jnml jnml 1428319 2012-07-24 07:29 main
    -rw-r--r-- 1 jnml jnml     332 2012-07-24 07:28 main.go
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ wc go.txt 
     131  131 7845 go.txt
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ tail go.txt 
    /home/jnml/src/github.com/nsf/gocode/config.go
    /home/jnml/src/github.com/nsf/gocode/rpc.go
    /home/jnml/src/github.com/nsf/gocode/_gccgo/package.go
    /home/jnml/src/github.com/nsf/gocode/_goremote/goremote.go
    /home/jnml/src/github.com/nsf/gocode/scope.go
    /home/jnml/src/github.com/nsf/gocode/formatters.go
    /home/jnml/src/github.com/nsf/gocode/autocompletefile.go
    /home/jnml/src/github.com/nsf/gocode/decl.go
    /home/jnml/src/tmp/go/main.go
    /home/jnml/src/tmp/SO/11623232/main.go
    (07:29) jnml@tsat:~/src/tmp/SO/11623232$ 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能