是否可以通过一个命令和文件来获取 $HOME 和系统中的补丁文件的补丁?

是否可以通过一个命令和文件来获取 $HOME 和系统中的补丁文件的补丁?

我使用创建了以下补丁文件diff -u file1 file2 | file.patch,然后编辑了该---行并更改了路径:

ArkOS_Dev_Openbox.patch
+++ ~/.config/openbox/menu.xml  2016-07-28 21:21:55.683952870 +0200
@@ -5,7 +5,7 @@
 <item label="Terminal"><action name="Execute"><execute>lxterminal</execute></action></item>
 <item label="Browser"><action name="Execute"><execute>firefox</execute></action></item>
 <item label="File Manager"><action name="Execute"><execute>spacefm</execute></action></item>
-<item label="Editor"><action name="Execute"><execute>geany</execute></action></item>
+<item label="Editor"><action name="Execute"><execute>gksu geany</execute></action></item>

 <separator/>
 <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />

+++ /usr/share/applications/geany.desktop.bak   2016-07-29 22:43:43.483359679 +0200
@@ -130,7 +130,7 @@
 Comment[vi]=Một IDE nhanh và nhẹ nhàng dùng GTK+
 Comment[zh_CN]=GTK+ 编写的轻快的 IDE
 Comment[zh_TW]=一個快速且輕巧的 GTK+ 整合開發環境
-Exec=geany %F
+Exec=gksu geany %F
 Icon=geany
 Terminal=false
 Categories=GTK;Development;IDE;

我尝试使用以下命令运行此补丁。

sudo patch -d / -p0 < ArkOS_Dev_Openbox.patch

这会导致由于波浪号而找不到第一个文件。我也尝试过使用 $HOME 但无济于事。

我想我正在尝试以一种我认为不适合的方式使用补丁,即桌面环境而不是软件包。

所以我的问题是,我可以这样使用补丁吗?我应该这样使用补丁吗?如果是这样怎么办?如果不是我应该用什么代替?

答案1

快速检查来源例如,显示 GNU 补丁不会将波形符扩展到主目录中。可能其他实现都没有这样做,因为大多数 - 除了也许一些闭源 Unix 版本 - 基于 GNU 补丁的早期版本(它是从 Larry Wall 的原始版本演变而来)。

您可以通过 sed 脚本来处理这个问题,例如:

sed -e "s,~/,$HOME/," ArkOS_Dev_Openbox.patch | sudo patch -d / -p0

进一步阅读:

相关内容