在 FIFO/名管上-可变文件失败( 部分读取)
作者: ichoosetoaccept创建于 2026年7月4日更新于 2026年8月10日
QQ 当前错误行为是什么 ?
`-可变文件'在文件为FIFO(名管)时失效。 Hurl在文件描述符上做一个"read()",并在那一瞬间得到管子缓冲器中的任何字节——往往是部分块——而不是循环到EOF. 这些变量被留空、被截断或从注释行的片段解析出,导致“未定义变量”/“变量值缺失”/“状态代码错误”。
- 复制步骤
- 创建 FIFO 和测试抛出文件: {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? mkdir /tmp/hurl-fifo-repro → cd /tmp/hurl-fifo-repro 互联网档案馆的存檔,存档日期2014-12-21. mkfifo vars.env (英语). printf"GET https://httpbin.org/get\nX-Api-Key: {{api key}}\nHTTP 200\n" > 测试. hurl
2. **控制——常规档案(工作):**
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
printf'api key=假值123\n' > vars-rent.env
投掷 -- -- 可变文件 -- -- vars- normal.env test.hurl
# 0号出口,HTTP 200- ** 财务和财务处——失败5/5:** {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? i 在12 3 4 5中; do (printf'api key=假值123\n' > vars.env) & 抛出-可变文件 vars.env 测试. hurl 2>&1|-头 - 1 响应"尝试$i出道:${PIPESTATUS[0]}" 已执行
错误: 自动状态代码( 或“ 未定义变量 ” / “ 缺少变量值 ” )
取决于哪个部分块到达)
出口4 (或3), 5/5失败
错误因部分字节的到来而异:
- 空块 -- -- “未定义变量”(出局3)
- 评论片段被解析为`名称=值'-`变量 < flagment *=(出 1)的缺失值'
- 短篇 " 关键值=值 " -- -- 发送请求的空值/部分值 -- -- `自动状态代码 ' (退出4)
什么是预期的正确行为?
`-可变文件'应循环到`已读()',直到EOF(返回了0字节),在解析之前累积全部文件内容——同样的方式是`cat'、`grep'和其他处理FIFO的标准工具。 FIFO是一个有效的文件类型,每POSIX, 和`open()' +`read()'的工作;阅读器只需要完全排出管子。
执行背景
- OS: macOS 15(达尔文25.5.
- 呼声版本:8.0.1
- 通过[1Password Environments](https://www.1password.dev/environments/)(beta)找到,将`.env'文件挂载为FIFOs根据1Password桌面应用程序的要求提供的文件,而不是将简洁的机密写入磁盘。 `-可变文件'在这些上的时间不到-100%——这是本报告的现实触发因素。
可能修正
变量文件读取器可能使用一个单一的“读取()”或“读取()到()”等同的不循环管道。 取而代之的是循环至-EOF读取(例如:`std:io:::read:read to end'/`read to string'哪个内部循环,或一个明确的循环'),应当将其固定. Rust的'std::fs::file'-'std:io:Read:read to string' 正确处理,因为它循环到EOF.内容来源: Orange-OpenSource/hurl