FreeBSD "パッチ"がヌルバイトを受け入れるようにするにはどうすればよいですか?

FreeBSD "パッチ"がヌルバイトを受け入れるようにするにはどうすればよいですか?

パッチの最後の行は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パッチはどちらもラリー・ウォールのパッチ・プログラムから始まりましたが、前者はより広く変更されました。具体的には、GNUパッチは、GNU diffによって出力される組み込みヌルを処理するように拡張されました。それでも、それずっと前に終わりました(1992年頃~によると変更ログ)。

何らかの理由でFreeBSD開発者はこの変更をマージしませんでした。 FreeBSDで機能が必要な場合は、GNUパッチポート(またはプリコンパイル済みパッケージ)を使用できます。バラより新鮮な港要約を提供します。

関連情報