bash - 从 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 --unbuffered
,python -u
或者stdbuf -oL
是一些允许以无缓冲方式运行命令的示例。
推荐阅读
- python - 按另一列分组的二进制目标变量的 value_counts 比率
- python - 如何在 Django 中使用 CSV 文件生成图形?
- node.js - 无法使用 node/express 对工作文件上传进行单元测试
- windows - 更新 desktop.ini 和 .ico 文件
- kubernetes - Kubernetes:我们如何列出特定命名空间中 N 天内修改的所有对象?
- c++ - 当每个应该使用 std::stof 和 atof 有什么区别?
- android - 我无法确定是什么导致我的应用出现此意外上传错误
- c# - 如何解决 Asp.Net MVC 中与 ActionName 相关的问题?
- python - 从 youtube-analytic-api 获取空行响应
- laravel - 如何在用户表的帮助下显示库存数据