▼すべてを開く。
▲すべてを閉じる。
$ ls -lr drwxr-xr-x 4 1000 1000 4096 12月 15 2000 lha-114i -rw-r--r-- 1 root root 1775 5月 6 01:24 lha-114i-sec.patch
$ patch -p0 < lha-114i-sec.patch patching file lha-114i/src/header.c patching file lha-114i/src/lhext.c
patchコマンドで-p0オプションを指定し、リダイレクト「<」でpatchコマンドにパッチファイル「lha-114i-sec.patch」を与える。すると、ディレクトリ「lha-114i/src/」にあるファイル「header.c」と「lhext.c」にパッチが当てられる。
patchコマンドを実行する時は、パッチファイルを置くディレクトリ、対象ファイルを置くディレクトリとコマンドを実行するディレクトリに注意する。
パッチファイルの先頭にあるファイルの情報を見ると、パッチを当てる対象のファイルがあるディレクトリが判る。patchコマンドはこの情報を元にパッチを当てるので、対象となるファイルの場所がpatchコマンドを実行しているディレクトリから見える場所でなくてはならない。
--- lha-114i/src/header.c.orig 2000-10-05 19:36:03.000000000 +0200 +++ lha-114i/src/header.c 2004-04-21 14:30:52.000000000 +0200
具体的に言うと、パッチ対象のファイルが「lha-114i/src/header.c」であった場合、パッチファイルは「lha-114i」と同じディレクトリ(lsコマンドで「lha-114i」が表示されるディレクトリ)に置いて、そのディレクトリでpatchコマンドを実行する。この時のオプションは-p0で、パス名を除去しないことを意味する。
パッチファイルを「src」と同じディレクトリ(lsコマンドで「src」が表示されるディレクトリ)に置いて、そのディレクトリでpatchコマンドを実行する場合、オプションを-p1に指定する。これにより、パス名の中の「/」が1つ除去されて「src/header.c」になり、ディレクトリ「src」の下にあるファイルにパッチを当てることができる。
パッチファイルをパッチの対象ファイルと同じディレクトリ(lsコマンドで「header.c」が表示されるディレクトリ)に置いて、そのディレクトリでpatchコマンドを実行する場合、オプションを-p2に指定する。あるいは、この-pオプションをなしにする。これにより、パス名の中の「/」が2つ除去されて「header.c」になり、ファイルにパッチを当てることができる。
オプション | パス名 |
---|---|
-p0 | lha-114i/src/header.c |
-p1 | src/header.c |
-p2 または オプションなし |
header.c |
パッチを当てる対象ファイルが見つからない場合、「File to patch:」とどのファイルにパッチを当てるか尋ねてくる。そこにファイルがあるディレクトリを入力すると、パッチが当てられる。
$ patch -p0 < lha-114i-sec.patch can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- lha-114i/src/header.c.orig 2000-10-05 19:36:03.000000000 +0200 |+++ lha-114i/src/header.c 2004-04-21 14:30:52.000000000 +0200 -------------------------- File to patch: Skip this patch? [y] y Skipping patch. 2 out of 2 hunks ignored can't find file to patch at input line 27 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- lha-114i/src/lhext.c.orig 2000-10-04 16:57:38.000000000 +0200 |+++ lha-114i/src/lhext.c 2004-04-21 14:30:52.000000000 +0200 -------------------------- File to patch: Skip this patch? [y] y Skipping patch. 2 out of 2 hunks ignored
既にパッチが当たっている場合、リバースパッチになるため以下のメッセージがでる。
$ patch -p0 < lha-114i-sec.patch patching file lha-114i/src/header.c Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file lha-114i/src/header.c.rej patching file lha-114i/src/lhext.c Reversed (or previously applied) patch detected! Assume -R? [n] n Apply anyway? [n] n Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file lha-114i/src/lhext.c.rej
リバースパッチ(パッチを当てる前の状態に戻す)を当てるかどうか、指示をする。
Reversed (or previously applied) patch detected! |
リバース(あるいはパッチ済み)パッチが検知されました。 |
Assume -R? [n] |
-Rオプションを適用しますか? [n]
リターンを押すと適用しない。 -Rオプションを適用してリバースパッチを当てる場合は「y」[return]を押す。 |
Apply anyway? [n] |
どうしても当てますか?
パッチを当てない場合はそのまま[return]を押す。 パッチを当てる場合は「y」[return]を押す。 |
Skipping patch. |
パッチをとばします。 |
2 out of 2 hunks ignored -- saving rejects to file lha-114i/src/header.c.rej |
2つの内の2つを無視します--パッチが当てられなかった部分をlha-114i/src/header.c.rejに保存します。 |
$ patch < lha-sec.patch patching file header.c
patchコマンドで、リダイレクト「<」でpatchコマンドにパッチファイル「lha-sec.patch」を与える。すると、ファイル「header.c」にパッチが当てられる。
パッチファイル「lha-sec.patch」は、ファイル「header.c」と同じディレクトリに置いてpatchコマンドを実行する。パッチファイルのヘッダにあるファイルの情報をチェックする。
$ more lha-sec.patch *** header.c.orig 2000-10-04 16:57:38.000000000 +0200 --- header.c 2004-04-21 14:30:52.000000000 +0200