パッチの最後の行は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パッチはどちらもラリー・ウォールのパッチ・プログラムから始まりましたが、前者はより広く変更されました。具体的には、GNUパッチは、GNU diffによって出力される組み込みヌルを処理するように拡張されました。それでも、それずっと前に終わりました(1992年頃~によると変更ログ)。
何らかの理由でFreeBSD開発者はこの変更をマージしませんでした。 FreeBSDで機能が必要な場合は、GNUパッチポート(またはプリコンパイル済みパッケージ)を使用できます。バラより新鮮な港要約を提供します。