在go cli函数中如何接受文本字符串?

时间:2019-05-03 21:38:39

标签: go

我正在尝试在PoC上通过将exec.Command添加到cli插件来工作,但是我在如何使它接受命令的用户输入方面苦苦挣扎。我承认我是Go语言的新手,来自PHP和Bash脚本,所以...我确定我在这里遗漏了一些非常基本的内容,这有点尴尬。

我尝试设置变量,将变量添加到输出中,添加bufio并尝试提示时没有运气。

out, err := exec.Command("mtr", "-c", "10", "-r", destIP).Output()

是最近一次失败...

type Mtr struct{}

func (m *Mtr) Run(command []string, context plugin.PluginContext, ui terminal.UI) {
    // var destIP string - commented out simply so I could rebuild the file and get the plugin working again.

    ui.Say("")
    ui.Say(terminal.AdvisoryColor("Wait while we run a traceroute..."))
    ui.Say("")

    out, err := exec.Command("mtr", "-c", "10", "-r").Output()
    if err != nil {
        ui.Say(fmt.Sprintf("%s", err))
    }
    output := string(out[:])

    table := ui.Table([]string{"", ""})

    table.Add("", output)
    table.Print()

我只是希望它能够接受这样的东西

mainprogram插件mtr 目前,我已将其设置为强制使用Google,但这并不是我真正想要的...

out, err := exec.Command("mtr", "-c", "10", "-r", "8.8.8.8").Output()

尝试失败的当前输出会产生-

Shawns-MBP-2:directoryhere $ mainprog plugin mtr 4.4.4.4

Wait while we run a traceroute...



Shawns-MBP-2:directoryhere$

With the forced Google DNS, it obviously shows -

Shawns-MBP-2:directoryhere $ mainprog plugin mtr

Wait while we run a traceroute...


   Start: 2019-05-03T15:41:18-0500   
   HOST: stuff   Loss%   Snt   Last   Avg  Best  Wrst StDev   
     1.|-- stuff   0.0%    10    1.6   1.7   1.2   3.1   0.5   
     2.|-- stuff  0.0%    10    2.6   6.5   2.0  12.4   4.5   
     3.|-- stuff               0.0%    10    3.3   3.3   2.7   4.1   0.4   
     4.|-- stuff       0.0%    10   13.6  12.2   9.1  15.6   2.5   
     5.|-- stuff               0.0%    10    9.2  12.9   9.2  17.7   2.5   
     6.|-- stuff              0.0%    10    8.7   9.1   8.0  10.5   0.6   
     7.|-- stuff               0.0%    10    9.1   9.2   8.2  10.1   0.5   
     8.|-- stuff            0.0%    10   10.3  10.1   9.7  10.4   0.3   
     9.|-- stuff              0.0%    10    8.8   9.2   8.5  10.7   0.6   
    10.|-- google-public-dns-a.googl  0.0%    10    8.7   8.9   8.2  10.0   0.4

2 个答案:

答案 0 :(得分:0)

您在寻找吗?

func main() {
    out, err := exec.Command("mtr", "-c", "10", "-r", os.Args[1]).Output()
    if err != nil {
        ui.Say(fmt.Sprintf("%s", err))
    }
}

将其构建为二进制文件并以IP /域作为参数进行调用。

阅读https://gobyexample.com/command-line-arguments了解更多详细信息

答案 1 :(得分:0)

指向正确的方向后,终于弄清楚了-

dest := os.Args[2]
out, err := exec.Command("mtr", "-c", "10", "-r", dest).Output()

这使它能够接受输入并验证了它同时接受IP和域。现在,这为可能性开辟了一个全新的世界:D