在golang中一起执行bash echo和nc

时间:2018-10-12 00:54:56

标签: bash go exec

这可能是一个简单的问题。在Linux机器上工作,我正在尝试从go程序向外壳发送命令。我有一台服务器在侦听请求。这行代码给我带来了麻烦。

cmd := exec.Command("echo -n 'hello' | nc localhost 3333")

我其余的代码可以正确运行命令...

但是,它只是将其识别为回声参数,而 rest是回声字符串的一部分。我想将回显传递给nc,以将消息发送到服务器。

我已经尝试过以这种方式重新排列它:

cmd := exec.Command("echo", "-n", "'hello' | nc localhost 3333")

但是它们产生相同的结果,或者是错误:

executable file not found $PATH

如何从go脚本中以这种方式一起执行echo和诸如nc的管道命令。

1 个答案:

答案 0 :(得分:1)

|><&...cd...,还有许多内置的shell ,这些由shell解释并相应执行。

因此,您需要调用shell,并使用-c标志执行命令,并提及shell以将以下参数作为命令执行。

package main

import (
    "os"
    "os/exec"
)

func main() {
    sh := os.Getenv("SHELL") //fetch default shell
    //execute the needed command with `-c` flag
    cmd := exec.Command(sh, "-c ", `echo -n 'hello' | grep "h"`)
    cmd.Stdout = os.Stdout
    cmd.Run()
}

我在这里使用grep,因为我没有nc