这可能是一个简单的问题。在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的管道命令。
答案 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