从远程 URL 下载数据可能是人们使用 curl 执行的最常见的操作。
用户通常会在命令行中添加各种附加选项来从传输中提取信息,但也可能认为实际获取的数据并不重要。有时,如果没有进行完整下载,他们就无法获得准确的元数据;有时,他们会运行性能测量,但实际内容并不重要,等等。用户有时会有理由不保存下载内容。
他们下载后,实际下载的内容就被丢弃了。仅在 GitHub 上,我们就能找到近百万行执行此类 curl 调用的命令行。
curl 当然提供了多种丢弃下载数据的方法,但最直接的方法可能是将内容写入空设备,例如 *nix 系统上的/dev/null
或 Windows 上的NUL:
像这样:
curl https://example.com/ --output /dev/null
或使用简短选项
curl https://example.com/ -o /dev/null
在许多情况下,我们可以使用 shell 重定向来完成相同的操作 – 它也可以同时重定向多个 URL:
curl https://example.com/ >/dev/null
毫无改进
上面的命令行非常好用,几十年来一直运行良好。然而,它有两个缺点:
- 缺乏可移植性。curl可以在大多数操作系统上运行,并且大多数选项和操作都完全相同,以至于您通常可以在不同机器之间来回复制命令行而无需过多考虑。然而,将数据输出到 /dev/null 的可移植性并不好,例如在 Windows 上尝试该操作会导致命令行失败。
- 性能。这看起来可能没什么,但完全避免写入数据,而是将其写入
/dev/null
基准测试结果显示性能提升显著。所以,如果你不需要数据,为什么不加快操作速度,而不是放慢速度呢?
shell 重定向方法具有相同的缺点。
用法
新选项的使用方法如下,每个要重定向的 URL 都需要一个--out-null
出现。
curl https://example.com/ --out-null
例如,这允许您将一个发送为 null 并保存另一个:
curl https://example.com/ --out-null https://example.net/ --output save-data
即将推出 8.16.0
此命令行选项在 curl 8.16.0 中首次亮相,将于 2025 年 9 月发布。
致谢
Stefan Eissing带来了这个选择。
原文: https://daniel.haxx.se/blog/2025/07/30/output-nothing-with-out-null/