Bashで区切られたドキュメントを介してパッチを実行する方法は?

Bashで区切られたドキュメントを介してパッチを実行する方法は?

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

できそうです。私が貼り付けたパッチファイルを見つけたらうまくいきます。

複数のファイルを含めずにパッチスクリプトを作成できるようにするためにこれを行いたいと思います。

これまでのところ、「パッチ」が何に関連しているのかよくわかりません。空白の問題があるようです。

ベストアンサー1

パッチを適用できるように、例の空白を変更すると、概念が受け入れ可能であることがわかります(catそうすることができるので必須ではありませんがpatch --dry-run <<'EOF')。

一方、空白のソートに誤ったパッチがある場合は、このパラメータを使用すること--ignore-whitespaceをお勧めします。 (パッチのマニュアルページでこれを見つけることができます。man patch

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

おすすめ記事