补丁:以非交互模式运行

Nic*_*mer 4 unix linux patch

我想自动测试一组仍然完全适用于(更新的)代码库的补丁。为此,我打算跑

patch -p 1 < path/to/patch0.patch
Run Code Online (Sandbox Code Playgroud)

对于所有补丁patch*.patch,检查此命令的返回码,并将其存储在某处。不幸的是,patch在某些情况下似乎可以交互工作。需要交互的典型输出是

can't find file to patch at input line 44
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: foo/docs/faq.html
|===================================================================
|--- foo.orig/docs/faq.html
|+++ foo/docs/faq.html
--------------------------
File to patch: 
Run Code Online (Sandbox Code Playgroud)

有没有办法patch非交互式运行?(也许patch不是这里任务的正确工具。)

Rus*_*nov 5

使用-f( --force) 选项:

echo a > a
echo b > b
diff -Nu a b > p
rm a b
patch -p 1 < p
Run Code Online (Sandbox Code Playgroud)
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:
--------------------------
|--- a  2016-05-11 16:16:24.115481324 +0700
|+++ b  2016-05-11 16:16:24.115481324 +0700
--------------------------
File to patch: 
Run Code Online (Sandbox Code Playgroud)

(要求输入)。然而,

patch -f -p 1 < p
Run Code Online (Sandbox Code Playgroud)
patch -f -p 1 < p
Run Code Online (Sandbox Code Playgroud)

以退出状态 ( $?) 1退出:

echo $?
1
Run Code Online (Sandbox Code Playgroud)