10.13 gnu patchと伝統的なpatch
現在のバージョンのgnu patchは,通常posixの標準に従い
ます.この一般的な規則へのわずかな例外は,See patch and POSIX.
残念ながらposixでは,複数の重要な方法で,patchの動作を再
定義しています.伝統的なpatchやgnu patchのバー
ジョン2.1とそれ以前で内部処理する必要がある場合,以下の違いを知っておく
べきです.
-
伝統的なpatchでは,-pのオペランドはオプションで,
-pだけだと-p0と等価です.現在-pオプションはオ
ペランドを要求し,-p 0は現在-p0と等価です.互換性を最
大にするため,-p0と-p1のようなオプションを使用してくだ
さい.
また,伝統的なpatchは,前置されるパスを取り除くとき,単純にス
ラッシュを数えていきます.patchは現在,パス名の構成要素を数え
ます.すなわち,一つ以上の隣接するスラッシュは,現在単一のスラッシュとし
て数えられます.互換性を最大にするため,ファイル名に//を含むパッ
チを送るのは避けてください.
-
伝統的なpatchは,デフォルトでバックアップが可能です.この動作
は現在,-bや--backupオプションで利用可能です.
反対に,posixのpatchでは,バックアップは一致しないものが
あるときでも決して作成されません.gnu patchでは,この動作
は--no-backup-if-mismatchオプションや,posix準拠にすること
で利用可能です.
伝統的なpatchの-b suffixオプションは,gnu
patchの`-b -z suffix'オプションと等価です.
-
伝統的なpatchは,パッチヘッダからパッチを当てるファイル名を直
観するために,複雑な(そしてドキュメントが不完全な)手法を使用していました.
この手法は,posixに準拠しておらず,わずかにgotchaもあります.現在
patchは,別の複雑な(しかしドキュメントがより良い),オプション
でposixに準拠している手法を使用してます.よりgotchaが少ないことを期
待しています.その二つの手法は,周りの文を使用した差分のヘッダがファイル
名で,`Index:'行が前置物を取り除いた後でもすべて識別できる場合,互
換性があります.ヘッダのファイル名が同じ数のスラッシュを含んでいる場合,
通常はパッチに互換性があります.
-
伝統的なpatchはユーザに質問するとき,標準エラー出力に質問を送
り,端末となっている以下のリストの最初のファイルから答を探します.標準エ
ラー出力,標準出力,/dev/tty,そして標準入力です.現在
patchは,標準出力に質問を送り,答を/dev/ttyから受けとり
ます.質問に対するデフォルトは,デフォルトの答えを使用するとき
patchが無限ループにならないように変更されています.
-
伝統的なpatchは,悪いhunkの数を数えたステータス値や,本当に問
題があったとき1になるステータスで終了していました.現在patchは,
hunkに失敗したものがある場合は1のステータス,本当に問題があったときは2の
ステータスで終了します.
-
gnu patch,伝統的なpatch,または,posix準
拠のpatchを実行している人に実行方法を説明するとき,以下のオプ
ションに制限してください.以下のリストのスペースは重要で,オペランドは必
要です.
-c
-d dir
-D define
-e
-l
-n
-N
-o outfile
-pnum
-R
-r rejectfile