gpt4 book ai didi

go - 如何使用未知参数执行系统命令?

转载 作者:IT老高 更新时间:2023-10-28 12:59:11 28 4
gpt4 key购买 nike

我有一堆类似于将新内容附加到文件的系统命令。我写了一个简单的脚本来执行系统命令,如果有 'ls' , 'date' 等单个单词,它会很好。但是如果命令大于那个,程序就会死。

以下是代码

package main

import (
"fmt"
"os/exec"
"sync"
)

func exe_cmd(cmd string, wg *sync.WaitGroup) {
fmt.Println(cmd)
c = cmd.Str
out, err := exec.Command(cmd).Output()
if err != nil {
fmt.Println("error occured")
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
wg.Done()
}

func main() {
wg := new(sync.WaitGroup)
wg.Add(3)

x := []string{"echo newline >> foo.o", "echo newline >> f1.o", "echo newline >> f2.o"}
go exe_cmd(x[0], wg)
go exe_cmd(x[1], wg)
go exe_cmd(x[2], wg)

wg.Wait()
}

以下是我看到的错误

exec: "echo newline >> foo.o": executable file not found in $PATHexec: 
"echo newline >> f2.o": executable file not found in $PATHexec:
"echo newline >> f1.o": executable file not found in $PATH

我猜,这可能是由于没有单独发送 cmds 和参数 (http://golang.org/pkg/os/exec/#Command)。我想知道如何颠覆这一点,因为我不知道我的命令中有多少需要执行的参数。

最佳答案

我找到了一个相对不错的方法来实现同样的目标。

out, err := exec.Command("sh","-c",cmd).Output()

直到现在都为我工作。仍在寻找更好的方法来实现这一目标。

编辑1:

最后一个更简单有效(至少到目前为止)的方法是这样的

func exeCmd(cmd string, wg *sync.WaitGroup) {
fmt.Println("command is ",cmd)
// splitting head => g++ parts => rest of the command
parts := strings.Fields(cmd)
head := parts[0]
parts = parts[1:len(parts)]

out, err := exec.Command(head,parts...).Output()
if err != nil {
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
wg.Done() // Need to signal to waitgroup that this goroutine is done
}

感谢 go 中的可变参数以及向我指出这一点的人:)

关于go - 如何使用未知参数执行系统命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437336/

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