2016-10-14 10 views
2

これら3つのコマンドを実行しています。"patch:****ファイルの名前を変更できません" bash patch error

cd "${folder1}" 
diff -ruN "${folder1}" "${folder2}" > "${patchname}" 
patch -f -s -d "${folder1}" --merge < "${patchname}" 

実行すると、folder1のファイルがfolder2と同じに変更されます。しかし、これらのコマンドを実行すると出力が得られます。

patch: **** Can't rename file ./update.patch.omMg8yG to update.patch : Operation not permitted

+0

'patch'はbashの一部ではなく、bashを一切インストールしないで使うことができます。 –

+0

と述べていますが、注目すべき項目がいくつかあります。書き込みが進行中であると同時にインクリメンタルにdiff *しているディレクトリのファイルに書き込むことは、一般的には良い考えではありません。ファイルがインラインで変更されている場合、パッチの動作は明確に定義されていません。 –

+0

'update.patch'は' patchname'の値ですか?誰かがそれを実行できるだけの十分な再生器を作ることができますか?(したがって、 'folder1'と' folder2'の内容の作成と設定、 'patchname'の設定などを担当します) –

答えて

0

問題はここにある:あなたがfolder1内部

cd "${folder1}" 
diff -ruN "${folder1}" "${folder2}" > "${patchname}" 

、およびログファイルを呼び出しているので、私たちが知っているfolder1(内部でもだパッチを作成しようファイル./update.patch.omMg8yG、現在のディレクトリを明示的に参照しています)。には、folder1folder2の違いがあり、これらの違いには、出力ファイル自体の内容も含まれます。出力ファイルは、diff操作の処理中に生成され、patch操作の過程で読み取られます。


その結果、patchは、それがから読んでいるパッチファイルを変更しようとしているです。それは失敗してしまいます。だからエラーですが、これは試行してはいけません。特に、ほとんどのUNIX系オペレーティングシステムでは、この試みは失敗しません(Cygwinやリモートファイルシステムを使用していると仮定しています)オープンされたリンクされていないファイルをサポートしていないマウント)。

patchfileの変数を別のディレクトリの場所(folder1またはfolder2)に変更しないでください。

関連する問題