最后一行的补丁在 FreeBSD 10.2 上失败,但在 GNU 上有效:
#!/bin/sh
echo a > f1
printf '\0' >> f1
echo c >> f1
cp f1 f2
echo d >> f2
diff -au f1 f2 > diff
patch < diff
FreeBSD 就不能做到这一点吗?手册页没有提到空字节。
答案1
patch
专为文本文件设计。看一眼xxd
,它可以修补二进制文件。它也应该适用于 FreeBSD。
答案2
这并不是一个不常见的限制,因为文本文件中不使用空字节。当然有一个用于 GNU 补丁的 FreeBSD 移植。
对于上下文,只需查看 FreeBSD 的手册页即可:
- 这是 GNU 差异,同意源代码库,而且实际上有点旧了(8年)。
- 这不是 GNU 补丁,再次同意源代码库。
GNU 补丁和 FreeBSD 补丁都起源于 Larry Wall 的补丁程序,但前者有更广泛的变化。特别是,GNU 补丁被扩展来处理可能由 GNU diff 输出的嵌入空值。仍然,甚至那很久以前就完成了(1992年左右根据变更日志)。
无论出于何种原因,FreeBSD 开发人员没有合并此更改。如果您需要 FreeBSD 上的功能,可以使用 GNU 补丁的端口(或预编译包)。看新鲜港口进行总结。