Patch
是否可以在一個命令和文件中同時獲得修補程序以修補 $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 也無濟於事。
我想我正在嘗試以我認為它們不適合的方式使用更新檔,桌面環境而不是包。
所以我的問題是,我可以這樣使用更新檔嗎?我應該以這種方式使用更新檔嗎?如果有怎麼辦?如果不是,我應該改用什麼?
對原始碼的快速檢查表明,例如 GNU 更新檔不會將波浪號擴展到主目錄。可能其他實現都沒有,因為大多數——除了一些閉源的 Unix 版本之外——都是基於早期版本的 GNU 更新檔(因為它是從拉里沃爾的原始版本演變而來的)。
您可以通過 sed 腳本處理此問題,例如,如下所示:
sed -e "s,~/,$HOME/," ArkOS_Dev_Openbox.patch | sudo patch -d / -p0
進一步閱讀: