- ベストアンサー
patch コマンド -p について
Linuxでpatchを当てた事がなく、Solarisでのイメージしかないのですが、Solarisでは # patchadd パッチファイル だったと思います。 linuxだとカレントディレクトリにパッチがあった場合、 # patch < パッチファイル では実行できないのでしょうか。 調べて見ると「-p」を指定しており、 -p0 パス名を修正しない (例 /tmp/src/patch) -p1 最初の「/」を削除する (例 tmp/src/patch) -p2 次のディレクトリまで削除する (例 src/patch) とありますが意味がよくわかりません。 お手数ですがご教授頂けると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
パッチファイルはどのディレクトリに対してパッチを当てるかという情報を持っています。 パッチファイルの実体はテキストファイルですので、中身を見るとこんな感じで書いてある箇所があります。 --- /old/src/test.c +++ /tmp/src/test.c このパッチを/home/hoge/src以下に当てようとした場合、 以下のようにコマンドを打ちます。 (パッチファイルはあらかじめコピーしておいたとして) # cd /home/hoge # patch -p2 < test.patch ここで-p2としたのは、パッチファイルは/tmp/src/test.cを前提をして作られていたからです。 /home/hoge/srcに対してこのパッチを当てるには、 共通するディレクトリ位置srcに合わせる必要があったので、 -p2を指定して、2段分のディレクトリ指定を取り除いたのです。 (/tmp/を取り除いてパッチを適用することになります) ちょっと分かりづらいところなんですが、 自分でパッチファイルを作るようになると意外と理解が早いです。 パッチファイルの実体はdiffというコマンドで作成した 差分ファイルと呼ばれるものです。 ご参考までに。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
たぶん「Solaris で patchadd を使ってあてるパッチ」と「Linux で patch を使ってあてるパッチ」とは全く違うものだと考えた方がいいと思う. で, 「カレントディレクトリにパッチがある場合」だけど, それでパッチが当たることもあるし当たらないこともある. パッチファイルの中に「どのファイルに対してパッチを当てるのか」が書いてあるんだけど, そのパス名の解釈方法を変えるのが -p というオプションです. 可能ならそのパッチファイルの先頭の数行を出してもらえると説明が簡単.