我使用Golang编写简单的脚本来使用一些参数grep日志文件.这是我的shell命令
grep CRON var/log/sys | tail -5 | grep "cd /home/raka/repo && git status"
我想使用os/exec
包在Golang上面运行命令.这是我的代码狙击.
var ( reader io.Reader out []byte err error commandName string = "grep" ) args := []string{"CRON", "/var/log/syslog", "| tail -6", "| grep \"git status\""} cmd := exec.Command(commandName, args...) r, err = cmd.StdoutPipe() err = cmd.Start() out, err = ioutil.ReadAll(r) err = cmd.Wait() return strings.Split(string(out), "\n")```
目前,上面的狙击不起作用,因为exit status 2
.你们这些人/女士们有解决这个问题的方法吗?非常感谢.
Pipes(|
)由shell程序(如bash)实现.如果你想使用它们,你应该执行shell传递包含管道程序调用的命令:
exec.Command("/bin/sh", "-c", "grep CRON var/log/sys | tail -5 | grep \"cd /home/raka/repo && git status\"")