我希望将mypatch.diff
的统一差异应用于stdin,并将结果输出到stdout。
到目前为止,我已经尝试过:
patch -i mypatch.diff -o - -u originalfile
它成功地应用mypatch.diff
并将结果打印到stdout。但是,我仍然必须以originalfile
的形式提供原始文件,而不是通过stdin提供。
如果我尝试这样的方法:
patch -i mypatch.diff -o - -u -
然后,修补程序被拒绝:
patching file -
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file -.rej
发布于 2023-02-27 20:35:26
看起来GNU patch
没有这样的选择。-
的意思是-i
的stdin或-o
的stdout ( -r
被解释为丢弃拒绝),但是对于文件补丁,-
被解释为当前目录中名为-
的文件。
此外,patch
还希望根据要修补的文件的名称创建具有.orig
或.rej
后缀的文件。
看起来,patch
不允许您修补符号链接,因此在Linux上,使用/dev/stdin或/proc/self/fd/0是行不通的。
如果使用zsh
,则可以使用使用临时文件的进程替换的=(...)
形式:
patch -i mypatch.diff -r - -o - =(cat)
https://unix.stackexchange.com/questions/737104
复制相似问题