bash - 使用 Golang 运行 Grep 命令时退出状态 2

标签 bash shell go

我使用 Golang 编写了简单的脚本来 grep 带有一些参数的日志文件。这是我的 shell 命令

grep CRON var/log/sys |尾部-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,上面的截图不起作用。 你们中的任何人/女士有解决这个问题的方法吗?非常感谢。

最佳答案

管道 (|) 由 shell 程序(如 bash)实现。如果你想使用它们,你应该通过包含管道程序调用的命令执行 shell:

exec.Command("/bin/sh", "-c",
    "grep CRON var/log/sys | tail -5 | grep \"cd /home/raka/repo && git status\"")

关于bash - 使用 Golang 运行 Grep 命令时退出状态 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669561/

相关文章:

linux - 如何在包含/bin 路径但不包含 shbangs 的目录中查找文件?

email - Bash 脚本 Ubuntu mailx

bash - 打印一个字符串,其特殊字符打印为文字转义序列

bash - 如何仅从 "du"获取文件夹大小?

linux - 日期的 Shell 脚本模式

linux - 获取终端版本的命令行

authentication - Golang HTTP 基本认证

concurrency - 是否可以将多个 channel 复用为一个?

linux - 从字符串中获取特定行,其中我必须获取的行号存储在变量中?

google-app-engine - 如何管理 App Engine Go 运行时上下文以避免 App Engine 锁定?