Patch

如何在 bash 中通過 heredoc 執行更新檔?

  • December 6, 2017

我正在嘗試在 bash 中修補這樣的文件:

cat << ''EOF | patch --dry-run
> --- urancid     2017-12-06 09:56:33.000000000 -0600  patch --dry-run
> +++ /tmp/urancid        2017-12-06 15:06:57.000000000 -0600
> @@ -393,7 +393,7 @@
>          last if (/^$prompt/);
>          next if (/-ac\.\s*/);
>          next if (/-fs\.\s*/);
> -       next if (/set date\s*/)
> +       next if (/set date\s*/);
>          next if (/^(\s*|\s*$cmd\s*)$/);
>          if ( ! /^$prompt/) {
>                  if ( ! $skipprocess ) {
> EOF

但我得到的只是

patching file urancid
Hunk #1 FAILED at 393.
1 out of 1 hunk FAILED -- saving rejects to file urancid.rej

似乎應該是可能的,如果我粘貼我粘貼的更新檔文件,它就可以工作。

我想這樣做,這樣我就可以製作一個不包含多個文件的更新檔腳本。

到目前為止,我對“更新檔”關心的內容不太熟悉,猜測存在一些空白問題?

在您的範例中修復空白以便可以應用更新檔表明該概念是可以接受的(儘管我不明白為什麼cat需要)。

另一方面,如果您有一個空白對齊嚴重的更新檔,我建議您使用該--ignore-whitespace參數。(您可以在更新檔的手冊頁中找到它man patch。)

patch --dry-run --ignore-whitespace << 'EOF'
...
...
EOF

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