我怎样才能让 FreeBSD “patch” 容忍空字节?

我怎样才能让 FreeBSD “patch” 容忍空字节?

最后一行的补丁在 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 补丁和 FreeBSD 补丁都起源于 Larry Wall 的补丁程序,但前者有更广泛的变化。特别是,GNU 补丁被扩展来处理可能由 GNU diff 输出的嵌入空值。仍然,甚至很久以前就完成了(1992年左右根据变更日志)。

无论出于何种原因,FreeBSD 开发人员没有合并此更改。如果您需要 FreeBSD 上的功能,可以使用 GNU 补丁的端口(或预编译包)。看新鲜港口进行总结。

相关内容