首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何应用补丁作为管道的一部分?换句话说,如何修补stdin?

如何应用补丁作为管道的一部分?换句话说,如何修补stdin?
EN

Unix & Linux用户
提问于 2023-02-27 16:32:25
回答 1查看 176关注 0票数 1

我希望将mypatch.diff的统一差异应用于stdin,并将结果输出到stdout。

到目前为止,我已经尝试过:

代码语言:javascript
运行
复制
patch -i mypatch.diff -o - -u originalfile

它成功地应用mypatch.diff并将结果打印到stdout。但是,我仍然必须以originalfile的形式提供原始文件,而不是通过stdin提供。

如果我尝试这样的方法:

代码语言:javascript
运行
复制
patch -i mypatch.diff -o - -u -

然后,修补程序被拒绝:

代码语言:javascript
运行
复制
patching file -
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file -.rej
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 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,则可以使用使用临时文件的进程替换的=(...)形式:

代码语言:javascript
运行
复制
patch -i mypatch.diff -r - -o - =(cat)

注意,对于-o --r -,您需要GNU patch 2.6或更高版本(参见提交提交)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/737104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档