当前位置:  开发笔记 > 编程语言 > 正文

创建一个在Go中运行任意shell命令的函数

如何解决《创建一个在Go中运行任意shell命令的函数》经验,为你挑选了1个好方法。

我试图在go中创建一个泛型函数,它接受输入shell命令(带参数)并执行它.

请注意,shell命令可能具有不同数量的参数.

我知道exec.Command()Go中输入("ls", "-la", "/var")命令+参数的格式.

以下剪辑的代码不起作用:

func exe_cmd(commandarray []string) {
var shell_command string = ""
for i := 0; i < len(commandarray); i++ {
                  shell_command = shell_command + " " + commandarray[i]
                  }
cmd := exec.Command(shell_command)
fmt.Println("Command is: ", shell_command)
fmt.Printf("==> Executing: %s\n", strings.Join(cmd.Args, " "))
out, err := cmd.Output()
fmt.Printf("OutVar: %s\n", out)
fmt.Printf("ErrVar: %s\n", err)
}

func dummy() {
dummycmd := []string{"ls", "-la", "/var"}
exe_cmd(dummycmd)
}

在的结束forshell_command变量将包含"ls -la /var",我有一个很难弄清楚如何形成它的方式,就是输入格式要求,即"ls", "-la", "/var"

我也尝试将dummycmd变量设置为变量,"ls -la /var"但我认为如果需要将其传递给上面格式的exec.Command则更糟.

思考?

谢谢.



1> JimB..:

您可以简单地匹配exec.Command函数的参数签名,即

(name string, arg ...string)

并使用可变参数语法将函数参数传递给 exec.Command

func execCmd(name string, args ...string) {
    cmd := exec.Command(name, args...)

    fmt.Printf("Command is: %s, %s", name, args)

    out, err := cmd.Output()

    fmt.Printf("OutVar: %s\n", out)
    fmt.Printf("ErrVar: %s\n", err)
}

但请注意,您不是在这里调用shell,因此依赖任何shell内置函数都会失败.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有