Bash 避免使用补丁命令来请求';要修补的文件:';

Bash 避免使用补丁命令来请求';要修补的文件:';,bash,diff,patch,Bash,Diff,Patch,我正在尝试修补一个文件 修补程序文件位于要修补的文件列表所在的目录中 当我跑步的时候 patchpatchfile.patch?这并不能避免交互的问题/必要性,不管指定了哪个-p,至少在删除新文件的情况下是如此。没有补丁手册页或教程可以解释如果第二个文件不存在会发生什么情况——在我看来,这是补丁的唯一逻辑用例。

我正在尝试修补一个文件

修补程序文件位于要修补的文件列表所在的目录中

当我跑步的时候

patch

这提醒了我

要修补的文件:


如何避免这种情况?在使用
diff
创建修补程序时,我应该在修补程序文件中添加什么以自动检测它应该修补的文件名,默认情况下,输出格式不包括原始文件名的文件名。您可以像这样使用
-u
选项更改此设置

$ diff -u OriginalFile NewFile >NewFile.patch
然后,你可以简单地

$ patch -u <NewFile.patch

$patch-uGNU版本的补丁包括一个
--batch
-t
选项,用于阻止所有提示

-t or --batch
   Suppress  questions  like  -f, but make some different assumptions: skip patches
   whose headers do not contain file names (the same as -f); skip patches for which
   the file has the wrong version for the  Prereq: line in the patch; and assume
   that patches are reversed if they look like they are.

如果你想应用另一个人的补丁,而你可能没有访问权限,你可以简单地给出一个文件的绝对路径,这个补丁会在提示时改变

您使用的修补程序文件的格式是什么?(包括文件的前几行将有助于识别这一点。)补丁文件通常是一个统一的diff(即
diff-u
的输出),因此它将一些文件名放在
patch
可以识别的顶部。但是,文件名可以是
a/subdir/file1
,而您当前的目录就在
subdir
上方。您可能需要使用
patch
-p
选项(例如
patch-p1
patch-p2
)。根据Craig的评论进行调整,
-pX
选项告诉
patch
从左侧剥离路径的
X
组件(斜线)。如果您无法找到
a/path/to/filename
要修补的文件:
,并且您知道该文件在您的系统上位于
path/to/filename
,您将使用
path-p1
从路径的开始处剥离
a/
,从而允许
patch
在您的系统上找到要修补的文件。reg,可能
diff-运行folder1/folder2/>patchfile.patch
?这并不能避免交互的问题/必要性,不管指定了哪个
-p
,至少在删除
新文件的情况下是如此。没有补丁手册页或教程可以解释如果第二个文件不存在会发生什么情况——在我看来,这是补丁的唯一逻辑用例。