Como posso executar o patch através de um heredoc no bash?

0

Estou tentando corrigir um arquivo como este no 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

mas tudo que eu obtenho é

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

Parece que deveria ser possível, se eu catar o arquivo de patch que estou colando, funciona.

Eu quero fazer isso para criar um script de patch sem incluir vários arquivos.

Eu não estou muito familiarizado com o que "patch" se preocupa até agora, adivinhando que há alguns problemas de espaço em branco?

    
por Peter Turner 06.12.2017 / 22:21

1 resposta

2

Corrigir o espaço em branco em seu exemplo para que o patch possa ser aplicado demonstra que o conceito é aceitável (embora eu não veja porque cat é necessário).

Por outro lado, se você tiver um patch com espaço em branco mal alinhado, sugiro usar o parâmetro --ignore-whitespace . (Você pode encontrar isso na página man do patch, man patch .)

patch --dry-run --ignore-whitespace << 'EOF'
...
...
EOF
    
por 06.12.2017 / 23:01