Patch

是否可以在一個命令和文件中同時獲得修補程序以修補 $HOME 和系統中的文件?

  • July 30, 2016

我使用創建了以下更新檔文件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 也無濟於事。

我想我正在嘗試以我認為它們不適合的方式使用更新檔,桌面環境而不是包。

所以我的問題是,我可以這樣使用更新檔嗎?我應該以這種方式使用更新檔嗎?如果有怎麼辦?如果不是,我應該改用什麼?

對原始碼的快速檢查表明,例如 GNU 更新檔不會將波浪號擴展到主目錄。可能其他實現都沒有,因為大多數——除了一些閉源的 Unix 版本之外——都是基於早期版本的 GNU 更新檔(因為它是從拉里沃爾的原始版本演變而來的)。

您可以通過 sed 腳本處理此問題,例如,如下所示:

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

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/299227