curl每行输出时触发send_notify命令的问题求助
问题分析与解决
原因分析
- 你的
notify_pipe函数仅执行一次read操作,只能处理curl输出的第一行,之后函数就会退出,无法持续处理后续新行。 - 部分流式接口的服务器响应需要curl禁用内部缓冲,否则数据会被缓存,无法实时输出到管道。
修复后的脚本
notify_pipe() { # 循环读取每一行输入,持续处理直到输入结束 while read -r msg; do notify-send "$msg" done } # -N 禁用curl内部缓冲,配合stdbuf确保每行实时输出 stdbuf -oL curl -s -N https://my-server.com/status | notify_pipe
关键修改说明
while read -r msg; do ... done:让函数进入循环,持续读取curl输出的每一行,每读到一行就调用一次notify-send发送通知。curl -N参数:关闭curl的内部缓冲机制,确保服务器推送的每一行数据都能立刻传递到管道中。stdbuf -oL:强制curl的标准输出使用行缓冲,保证每行数据生成后立即刷新,而不是等待缓冲区填满才输出。
内容的提问来源于stack exchange,提问作者user20327726
相关产品推荐
相关产品推荐

