从bash脚本转发流



我有一个帮助脚本调试服务器的go,名为debug.sh,返回JSON日志,并能够处理最终的错误(恐慌,…)

!#/bin/sh
go run server.go 2>&1 | jq -Rr '. as $raw | try fromjson catch $raw'

然后当我执行。/debug.sh时,我的日志以一种很好的方式打印出来,如果有错误的话,错误会被捕获。

./debug.sh
{
"severity": "info",
"message": "Worker 095d1c8a-5abe-47a3-b945-68be2ded4d83 ready."
}

但是如果想做一个额外的处理:

./debug.sh | jq -r ".message"

我没有输出。

我猜这是因为管道在下标中被阻塞了,我可以从我的终端执行所有JQ操作,但我希望脚本易于使用。

如何解决这个问题?

管道中的命令默认是完全缓冲的。如果你想让它们以交互的形式执行,请禁用缓冲。

jq --unbufferedpython -ustdbuf -oL是一些例子,允许以一种无缓冲的方式运行命令。

相关内容

  • 没有找到相关文章

最新更新