[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10. patchを用いてマージする

patchは,diffで生成される比較された出力を受けとり, パッチをあてたバージョンを生成しながら,オリジナルファイルのコピーに差分 を適用します.patchを用いることで,ファイルをすべて配布する代 わりに,変更したファイルの組だけを配布することが可能になります.取引先で は,変更したファイルのコピーを更新するためにpatchを適用するこ とが可能になります.patchは差分の書式を自動的に決定し,前後の ヘッダを飛ばし,パッチをあてるファイルを決定するためにヘッダを使用します. これで,取引先はpatchに直接,変更部分のリストをメールのメッセー ジに含めることができます.

patchは,後戻りするパッチのような一般的な問題を検出し警告を発 します.それで適用しなくてもよいパッチあてることを止めます.また,取引先 が適切な順序で差分を適用するのを確実にするため,patchlevel.hファ イルも管理することが可能です.

patchは,標準入力から連続した差分を受け入れ,それは通常,パッ チをあてるファイルを指定するヘッダで分離されています.それは, diffのhunk(see section Hunks)を一つずつ適用します.hunkが元ファイ ルに正確にマッチしない場合,patchはできる限り発見的手法を用い てパッチをあてるファイルを見つけようとします.適切にマッチしている部分を 見つけることが不可能な場合,patchはhunkを除外し,次のhunkに飛 びます.patchは通常,hunk(が存在する場合はそれ)を ‘f.rej’に捨てながら,それぞれのファイルfを新しいバージョ ンで置換します.

patchへのオプションの詳細は,See section patchの呼び出し.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.1 patchの入力書式の選択

patchは,パッチファイルで使用しているdiffの書式を, その内容を調査して決定します.特定の複雑な前置テキストの一つが含まれてい るパッチファイルに対し,patchがパッチファイルを特定の書式の差 分であると解釈するように,以下のオプションの一つを使用する必要があるかも しれません.以下でリストアップしている出力書式は,patchが理解 可能なものだけです.

-c
--context

周りの文を使用した差分.

-e
--ed

edスクリプト.

-n
--normal

通常の差分.

-u
--unified

一体化した差分.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.2 リビジョンコントロール

存在しない入力ファイルが,patchでサポートされているリビジョン コントロールシステムにある場合,patchは通常,ユーザにリビジョ ンコントロールシステムからファイルを入手(チェックアウト)するかどうかを尋 ねます.パッチは現在,RCS,ClearCase,そしてSCCSをサポートして います.RCSSCCSでは,patchは入力ファイルが読み込み 専用で,デフォルトのバージョンがリビジョンコントロールシステムのものとマッ チするときにも質問してきます.

-g num’や‘--get=num’は,サポートされているリ ビジョンコントロールシステムのファイルへのアクセスに影響します. numが正の場合,patchはユーザに尋ねることなくファイルを入 手します.ゼロの場合,patchはファイルを入手するかどうかをユー ザに尋ねます.負の場合,patchはファイルを入手する前にユーザに 尋ねます.numのデフォルト値は,PATCH_GET環境変数が設定されて いる場合,それで与えられます.存在しない場合,patchPOSIXに準拠している場合はデフォルト値はゼロで,そうでない場合は負に なります.See section patchPOSIXの標準.

リビジョンコントロールシステムの選択は,VERSION_CONTROL環境変数に 影響しません(see section バックアップファイル名).


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.3 不完全なパッチの適用

patchは,パッチファイルに前置されるテキストを読み飛ばし,差分 を適用し,そして後置されるテキストを読み飛ばそうとします.このため,メー ルのメッセージを直接patchに与えることが可能で,それはうまく動 作するでしょう.差分全体が空白の固定量と思われる場合,patchは 自動的に字下げを無視します.前後の文を使用した差分のそれぞれの行に改行が 後置されている場合,patchは自動的に改行を無視します.前後の文 を使用した差分が,Internet RFC 934によって,‘-’で始まる行に‘- ’を前置することでカプ セル化されている場合,patchは自動的に入力のカプセル化を外しま す.

しかし,他の形式の不完全な入力では,ユーザが介入したりテストしたりする必 要があります.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.3.1 空白が変更されているパッチを適用する

メーラ,エディタ,またはその他のプログラムによって,スペースをタブまたは その反対に変更するものもあります.これがパッチファイルや入力ファイルに対 して生じている場合,ファイルは同じように見えますが,patchはそ れらを適切にマッチさせることが不可能です.この問題が生じる場合,パッチファ イルの空ではない連続した空白が空ではない入力ファイルの連続した空白にマッ チするように,patchの空白文字(例えば,スペースとタブ)の比較を 曖昧にさせる,‘-l’や‘--ignore-white-space’オプションを使用 してください.空白ではない文字は正確にマッチするはずです.周りの文のそれ ぞれの行は,入力ファイルの行にマッチするはずです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.3.2 リバースパッチを適用する

二番目のファイルの代わりに最初の新しいファイルでdiffを実行する こともあります.これで“リバース”の差分が生成されます.そのようなパッチ を適用するために,patchに‘-R’や‘--reverse’オプショ ンを与えてください.patchはそれぞれのhunkの周りを,それを適用 する前に入れ換えようとします.除外されたものは入れ換えられた書式に出力さ れます.

パッチがリバースだとpatchが分かることもよくあります.パッチファ イルの最初のhunkで失敗する場合,リバースすることで適用可能かどうかを判定 するために,patchはhunkをリバースします.可能な場合, patchは‘-R’オプションを設定したいかどうかを尋ねます.不 可能な場合,patchは通常通りパッチを適用し続けます.パッチが通 常の差分で,最初のコマンドの追加が常に成功するため(削除されているであろ う)最初のコマンドが追加されている場合,空文がどこかでマッチするので,こ の手法でリバースパッチを検出することは不可能です.しかし,ほとんどのパッ チは行を削除するのではなく追加したり変更したりしているので,ほとんどの通 常のリバース差分は削除で始まり,失敗するとpatchはそれに注目し ます.

既に適用しているパッチを適用する場合,patchはそれをリバースパッ チだと考え,パッチを逆に適用するように提案します.これは特長と言っても良 いでしょう.不注意にこうしてしまい,パッチを逆に適用したくない場合,その まま続けて“適用する”ために,この提案に‘n’と答えてください — ま たは,patch処理を中止するためにC-cを入力してください.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.3.3 不正確なマッチをpatchが見つけるように手助けをする

周りの文を使用した差分と,より少ない範囲の通常の差分に対して,パッチが記 述している行番号が正しくないときは,patchは正しいものを検出す ることが可能で,パッチのhunkを適用する正しい場所を見つけようとします.最 初に見つかると,hunkで記述されている行番号に,以前にhunkに適用したオフセッ トを加えたり引いたりします.それが正しい場所ではない場合,hunkで与えられ る周りの文に一致する行の前後をpatchはスキャンします.

最初にpatchは周りの文のすべての行がマッチする場所を探します. そのような場所を見つけることができず,周りの文を使用している差分や一体化 した差分を読み込んでいて,最大のfuzzの要素が1以上に設定されている場合, 周りの文の最初と最後の行を無視しながら,patchはもう一度スキャ ンします.それでも失敗し,最大のfuzzの要素が2以上に設定されている場合, 周りの文の最初の二行と最後の二行を無視しながらもう一度スキャンします.最 大のfuzzの要素がそれより大きい場合は,同様に続けていきます.

-F lines’や‘--fuzz=lines’オプションで,最大の fuzzの要素をlinesに設定します.このオプションは,周りの文を使用し ている差分や一体化した差分だけに適用されます.hunkを導入する場所を探して いる間,lines行まで無視します.より大きなfuzzの要素で,不完全なパッ チを作成する可能性が高くなることに注意してください.デフォルトのfuzzの値 は2です.周りの文を使用した差分の行数,通常は三行,以上に設定しても意味 はありません.

patchがパッチのhunkを導入する場所を見つけることができない場合, hunkをリジェクトファイルに書き出します(リジェクトファイルの命名方法は, see section リジェクトされたファイル名).入力されるパッチの形式のまま,リジェクトされた周 りの文を用いた書式のhunkを書き出しても問題ありません.入力が通常または edの差分の場合,周りの文の多くは単にヌルになります.リジェクト ファイルのhunkの行数は,これらのパッチファイルとは異なります. patchが失敗したファイルが属する適切な場所を,古いファイルでは なく新しいファイルで示しています.

--verbose’オプションが与えられている場合,それぞれのhunkが完了す るとき,patchはhunkが成功したか失敗したかを告げ,失敗した場合, hunkを適用すべき行だとpatchが考える(新しいファイルの)行を報告 します.これが差分で指定されている行番号と異なる場合,そのオフセットを報 告します.単一の大きなオフセットは,patchがhunkを間違った場所 に導入していることを示している可能性があります.疑わしい場合も, patchは,マッチするようにfuzz要素を使用したかどうかを報告しま す.

patchは,行番号がedスクリプトでoffになっているかどう かを報告することはできませんが,変更や削除コマンドになっている通常の差分 での間違った行番号を検出することだけは可能です.差分に表示されている周り の文の行数(通常は3)以上のfuzz 要素を使用しているときの,周りの文を使用し た差分でも同じ問題があるかもしれません.この状況では,オリジナルとパッチ をあてる入力の間を変更することに意味があるかどうかを知るために,周りの文 を使用した差分を見るべきでしょう.エラー無く組み込まれると,パッチが動作 したことを見事に示していますが,保証はしていません.

空のファイルへのパッチは,存在しないファイルに適用され,その逆も真です. See section ファイルの作成と削除.

patchは通常,たくさん推測する必要があっても,正しい結果を生成 します.しかし,結果はパッチが生成されたファイルのコピーに正確に適用され るときだけ保証されます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.3.4 patchが行なうことの予測

patchが複雑なまたは不完全な書式のパッチをどのように処理するか は,あらかじめ明確でないかもしれません.入力でpatchが間違った ファイルを編集することが心配な場合,実際にファイルを変更することなく patchがパッチを適用した結果を出力する,‘--dry-run’オプ ションを使用することが可能です.patchが期待したファイルを編集 するかどうかを調べるために,予行演習をすることで生成される診断結果を,検 査することが可能です.パッチが期待したものでない場合,パッチ(または patchのその他のオプション)を編集して,もう一度予行演習すること が可能です.パッチの目的に満足したら,patchを前回同様に呼び出 すことで適用することが可能で,このときは‘--dry-run’オプションは用 いません.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.4 ファイルの作成と削除

二つのディレクトリを比較しているとき,一方のディレクトリに存在しているファ イルがもう一方には無いこともあるかもしれません.diffに ‘-N’や‘--new-file’オプションを与える場合や, ‘/dev/null’という名前のファイルや空のファイル,そしてEpoch (1970-01-01 00:00:00 UTC)の日付のファイルで,古いファイルや新しいファイ ルを提供した場合,diffはこのファイルの内容を追加したり削除した りします.そのようなパッチが与えられたとき,patchは通常,新し いファイルを作成したり,古いファイルを削除したりします.しかし, POSIX(see section patchPOSIXの標準)に準拠するとき,patchは古い ファイルを削除せず,空にして残します.‘-E’や ‘--remove-empty-files’オプションで,パッチを適用後に空になる出力 ファイルを,パッチがファイルを削除するようには見えない場合でも patchは削除します.

パッチが既存のファイルを作成するように見える場合,patchはパッ チを適用する前に,確認のため尋ねてきます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.5 パッチファイルのタイムスタンプを更新

patchがファイルを更新するとき,通常ファイルの最終更新のタイム スタンプを現在の日時に設定します.ソフトウエア配布物の追跡に patchを使用している場合,これでmakeは,パッチをあて たファイルが古いものだと間違って推定するはずです.例えば, ‘syntax.c’が‘syntax.y’に依存していてpatchが ‘syntax.c’を更新してから‘syntax.y’を更新する場合, ‘syntax.y’が更新されているにもかかわらず,‘syntax.c’はそれより 古いものになります.

-Z’や‘--set-utc’オプションで,patchはパッチをあ てたファイルの編集時刻とアクセス時刻を,周りの文を使用した差分のヘッダで 与えられるタイムスタンプに設定します.周りの文を使用した差分のヘッダに, タイムゾーンが指定されていない場合,Coordinated Universal Time(GMT として知られていることが多いUTC)だと仮定します.

-T’や‘--set-time’オプションは,‘-Z’や ‘--set-utc’のように動作しますが,周りの文を使用した差分のヘッダの タイムスタンプを,UTCの代わりにローカルタイムを使用していると仮定し ます.ローカルタイムを使用しているパッチは,他のタイムゾーンにいる人が簡 単に使用することが不可能で,ローカルなタイムスタンプは,ローカルな時計が 夏時間に調整されている間に戻ってしまうので,このオプションは推奨されませ ん.周りの文を使用した差分のヘッダがタイムゾーンを指定している場合,この オプションは,‘-Z’や‘--set-utc’と等価です.

patchは通常,ファイルのオリジナルの最終更新のタイムスタンプが 差分のヘッダで与えられるタイムスタンプとマッチしない場合や,ファイルの内 容がパッチに正しくマッチしない場合,ファイルのタイムスタンプで設定されて いるものにすることを差し控えます.しかし,‘-f’や‘--force’ オプションが設定されている場合,ファイルのタイムスタンプはおかまいなしに 設定されます.

現在のdiff書式の制限のため,patchで内容が変更されて いないファイルのタイムスタンプを更新することは不可能です.また,ファイル のタイムスタンプを現在の日時以外に設定する場合,後にmakeの呼び 出しで,パッチをあてたファイルのタイムスタンプで混乱しないように,パッチ をあてるファイルに依存するすべてのファイルも(例えば‘make clean’で) 削除するべきです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.6 ファイル内の複数のパッチ

パッチファイルは一つ以上のパッチが含まれている場合,そして,コマンドライ ンで入力ファイルを指定していない場合,patchはそれぞれのファイ ルを個別のパッチファイルから来たもののように適用します.これは,それぞれ のパッチに対するパッチをあてるファイル名を決定し,ファイル名に対するそれ ぞれのパッチの前に前置されているテキストと,必要条件となるリビジョンレベ ルを調べるということを意味します(この話題の詳細は,see section パッチの作成と使用の助言).

パッチの前に前置されてるテキストからファイル名を直観で知るために, patchは以下の規則を使用します.最初に,patchは以下の ような対象となるファイル名の順序のあるリストを受けとります.

そして,patchは以下のような対象となるファイルのリストからファ イル名を選択します.

ファイル名の空ではない最適な(best)リストを決定するため, patchは最初に,パス名の構成要素を最小にして,すべての名前を受 けとります.そして,最短のベース名にしてすべての名前を受けとります.そし て,すべての最短の名前を受けとります.最後に,残っている最初の名前を受け とります.

patchPOSIXに準拠しているかどうかを知るために, See section patchPOSIXの標準.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.7 他のディレクトリでパッチを適用する

-d directory’や‘--directory=directory’オプショ ンをpatchに渡すと,ディレクトリdirectoryを,パッチファイ ル内のファイル名と,それ以外の(‘-B’と‘-o’のような)オプショ ンの引数として与えられているファイル名の両方を解読するカレントディレクト リにしにします.例えば,メールを読むプログラムで,‘/usr/src/emacs’ ディレクトリに,以下のようなパッチを含むメッセージから直接ファイルにパッ チをあてることが可能です.

 
| patch -d /usr/src/emacs

パッチで与えられるファイル名にディレクトリが前置されてはいるものの,パッ チで与えられているディレクトリとは異なるディレクトリにファイルを保持した いときもあります.この状況では,ファイル名をnumber個切り取って設定 するために,‘-pnumber’や‘--strip=number’オプショ ンを使用することが可能です.切り取り数は,ファイル名の最初から切り取る, ディレクトリ名が間にはいっている,スラッシュの数をpatchに伝え ます.一つ以上の隣接したスラッシュは,単一のスラッシュとして数えられます. デフォルトで,patchはすべての前置したディレクトリを切捨て,ファ イルのベース名だけを残します.

例えば,パッチファイルのファイル名が‘/gnu/src/emacs/etc/NEWS’だと仮 定します.‘-p0’を使用すると,ファイル名は編集されずに全部与えられ, ‘-p1’では,‘gnu/src/emacs/etc/NEWS’(前置されたスラッシュが無 い)が与えられ,‘-p4’では‘etc/NEWS’が与えられ,‘-p’を 全く指定しなければ,‘NEWS’が与えられます.

patchはカレントディレクトリで,(スラッシュを切り捨てた後)それ ぞれのファイルを探し,‘-d directory’を使用した場合はそのディ レクトリで探します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.8 バックアップファイル

通常,パッチが正確にオリジナルの入力ファイルにマッチしない場合,その状況 では‘patch -R’ (see section リバースパッチを適用する)でパッチを元に戻す場合にオ リジナルデータが元に戻らないので,バックアップファイルを作成します.しか し,POSIXに準拠しているとき,patchはデフォルトでバックアッ プファイルを作成しません.See section patchPOSIXの標準.

-b’や‘--backup’オプションで,patchはパッチがオ リジナルの入力にマッチするかどうかに依存せずバックアップファイルを作成し ます.‘--backup-if-mismatch’オプションでは,patchはマッ チしないファイルに対してバックアップファイルを作成します.これは, POSIXに準拠していないときのデフォルトです. ‘--no-backup-if-mismatch’オプションで,patchはマッチし ないファイルに対してもバックアップファイルを作成しません.これは POSIXに準拠しているときのデフォルトです.

バックアップファイルが存在しないとき,存在しないファイルを再生成させる場 所として,空の読み込み不可能なバックアップファイルが作成されます.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.9 バックアップファイル名

通常,patchは,オリジナルの入力ファイルを,その名前に拡張子 ‘.orig’や,‘.orig’がバックアップファイルとして長過ぎる場合は ‘~’を後置したバックアップファイルに名前を変えます. (1)-z backup-suffix’や‘--suffix=backup-suffix’オ プションで,代わりのバックアップ用拡張子としてpatchbackup-suffixを使用します.

また,SIMPLE_BACKUP_SUFFIX環境変数でバックアップファイルの拡張子を 指定することも可能ですが,オプションが優先されます.

patchでは,GNU Emacsのように番号付のバックアップファイル を作成することも可能です.この手法を用いることで,それぞれのファイルに対 して単一のバックアップファイルを持つ代わりに,patchでファイル にパッチを当てるたびに新しいバックアップファイルを作成します.例えば, ‘sink’という名前のファイルのバックアップは,連続的に, ‘sink.~1~’,‘sink.~2~’,‘sink.~3~’等になります.

-V backup-style’や ‘--version-control=backup-style’オプションは,バックアップ ファイルを作成する手法を引数として受け入れます.patchPATCH_VERSION_CONTROL環境変数を用いて作成するバックアップの形式を 制御することも可能で,‘-V’オプションで優先します. PATCH_VERSION_CONTROLが設定されていない場合,VERSION_CONTROL 環境変数が代わりに使用されます.これらのオプションや変数でバックアップファ イルの名前を制御することに注意してください.リビジョンコントロールシステ ムの選択には影響しません(see section リビジョンコントロール).

環境変数と‘-V’オプションの引数の値は,GNU Emacsの version-control変数に似ています(Emacsのバックアップバージョンの詳 細は,see (emacs)Backup Names section ‘Backup Names’ in The GNU Emacs Manual).それ らは,より記述的な同義語も認識します.有効な値は以下にリストアップしてい ます.一意に求まる省略も受け入れます.

t
numbered

常に番号付のバックアップファイルを作成します.

nil
existing

既に存在しているファイルの番号付のバックアップを作成し,それ以外では単純 なバックアップを作成します.これはデフォルトです.

never
simple

常に単純なバックアップを作成します.

patchに,ディレクトリ名のような接頭辞を付けてバックアップファ イルを作成するるように伝えることも可能です.‘-B prefix’や ‘--prefix=prefix’オプションで,prefixを前置したバック アップファイルを作成します.‘-Y prefix’や ‘--basename-prefix=prefix’で,バックアップファイル名のファ イル名の構成要素の最後に,その代わりにprefixを前置します.例えば, ‘-Y ~’で‘dir/file.c’のバックアップファイルは ‘dir/~file.c’になります.これらの接頭辞オプションの一つを使用した場 合,接尾子をベースにしたオプションは無視されます.

出力ファイルを‘-o’オプションで指定する場合,そのファイルはバック アップされたものになりますが,入力ファイルではありません.

バックアップファイルの名前に影響するオプションは,バックアップを作成する かどうかに影響しません.例えば,‘--no-backup-if-mismatch’オプショ ンを指定した場合はバックアップが作成されないので,このセクションで記述さ れているオプションは全く影響しません.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.10 リジェクトされたファイル名

リジェクトファイル(パッチに含まれているファイルで,patchを適用 する場所を見つけられなかったファイル)に対する名前は通常,出力ファイルに ‘.rej’を後置して命名されます(または,‘.rej’を用いた場合,バッ クアップファイル名が長過ぎる場合は‘#’になります).

また,すべてのリジェクトされたファイル名を単一のファイルに書くように伝え ることも可能です.‘-r reject-file’や ‘--reject-file=reject-file’オプションは,reject-file をリジェクトされたファイル名として使用します.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.11 patchからのメッセージと質問

patchは,特に入力のデコードで問題がある場合,様々なメッセージ を生成するはずです.処理方法が分からないような状況で,patchは 通常,キーボードから更に情報を入力するように促します.キーボードからの入 力を促さないようにしたり,メッセージ内のファイル名を引用符で囲む方法に効 果を与えるために,メッセージを多くしたり少なくしたりするオプションもあり ます.

patchは,すべてのhunkが正しく適用された場合は0,hunkが適用でき なかった場合は1,そして,より重要な問題がある場合は2のステータスで終了し ます.ループでパッチの組を適用しているとき,部分的にパッチを当てたファイ ルにそれ以降適用しないように,終了ステータスを調査すべきです.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.11.1 patchの冗長な制御

--verbose’オプションを用いることで,patchにより多くの メッセージを生成させることが可能です.例えば,このオプションを与えたとき, メッセージ‘Hmm...’は,patchがパッチファイルのテキストを読 み込んで,テキストにパッチがあるかどうかの決定を試み,存在する場合はパッ チの種類が何かの決定を試みていることを示します.

-s’,‘--quiet’,または‘--silent’オプションを使用す ることで,エラーが発生しない限り,patchからの端末へのすべての 出力を抑制することが可能です.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.11.2 キーボード入力の抑制

patchが尋ねることを避ける方法は二つあります.‘-f’や ‘--force’オプションは,行なっていることが分かっていることを仮定し ます.それでpatchは以下のことを行ないます.

-t’や‘--batch’オプションは‘-f’に似ていて,質問を抑 制しますが,仮定は多少異なります.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.11.3 patchが引用符で囲む形式

patchが診断メッセージでファイル名を出力するとき,名前の書式は 何通りかになります.出力ファイル名に,句読点や改行のような特殊文字を含ん でいる場合でさえ,それを明確にするとき役に立つはずです. ‘--quoting-style=word’オプションで,名前の出力方法を制御し ます.wordは以下の一つです.

literal

名前をそのまま出力します.

shell

名前にシェルのメタ文字や明確でない出力になる場合,シェルに対して名前を引 用符で囲みます.

shell-always

名前が通常のもので引用符で囲む必要が無い場合でも,シェルに対して名前を引 用符で囲みます.

c

C言語の文字列のように,名前を引用符で囲みます.

escape

周りの二重引用不文字を削除する以外,‘c’のように引用符で囲みます.

--quoting-style’オプションのデフォルト値を,環境変数 QUOTING_STYLEで指定することが可能です.この環境変数が設定されてい ない場合,デフォルト値は‘shell’ですが,patchの将来のバー ジョンでは,このデフォルト値は変更されるかもしれません.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.12 patchPOSIXの標準

--posix’オプションを指定したり,POSIXLY_CORRECT環境変数を 設定した場合,patchは厳密にPOSIXの標準に従い,それは以下 の内容です.


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

10.13 GNU patchと伝統的なpatch

現在のバージョンのGNU patchは,通常POSIXの標準に従い ます.この一般的な規則へのわずかな例外は,See section patchPOSIXの標準.

残念ながらPOSIXでは,複数の重要な方法で,patchの動作を再 定義しています.伝統的なpatchGNU patchのバー ジョン2.1とそれ以前で内部処理する必要がある場合,以下の違いを知っておく べきです.


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書は新堂 安孝によって2009年9月22日texi2html 1.82を用いて生成されました。