You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比对慢速netcat客户端的输出与test.out参考文件的内容?

问题原因

  • readarray -t参数会移除每行末尾的换行符,直接用printf $ELEMENT发送内容时没有补充换行,服务端无法识别完整指令,会一直等待后续输入导致卡住
  • 循环遍历数组时没有给变量加引号,若行内容包含空格/特殊字符会被拆分,发送错误的指令格式
  • 部分版本netcat的-q -1参数逻辑异常:该参数定义为收到EOF后等待N秒再退出,-1属于非法值,会导致nc连接不主动关闭
  • 管道默认启用块缓冲,netcat的输出不会实时传递给diff,可能导致感知上的卡住

修复方案

使用调整后的脚本即可:

readarray -t FILES < text.in

for ELEMENT in "${FILES[@]}"
do
  printf '%s\n' "$ELEMENT"
  sleep 2
done | stdbuf -o0 nc -q 0 localhost 5555 | diff - test.out

调整说明

  • 给${FILES[@]}加双引号保证每行内容原样遍历
  • printf '%s\n' "$ELEMENT"主动补充每行的换行符,服务端可以正常识别单条指令
  • 用stdbuf -o0关闭nc的标准输出缓冲,收到服务端返回后立即传递给下游diff
  • 将-q -1改为合法值-q 0,发送完所有指令后等待服务端关闭连接就立即退出,不会挂住

如果你使用的是OpenBSD版本netcat(如macOS默认自带的nc),没有-q参数,可以将-q 0替换为-N即可正常运行。

内容的提问来源于stack exchange,提问作者leoneu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:10