escreve um aviso se o comando perl no script bash falhar em fazer uma substituição

1

Eu tenho um script bash que usa perl para substituir um regex em um arquivo de configuração. Se alguém tiver modificado manualmente partes do arquivo conf, elas não deverão ter o regex, porque a linha que está procurando não existe ou não corresponde mais à regex.

Eu quero adicionar uma verificação rápida para ver se ocorreu uma substituição, e se não ocorrer uma gravação alguma mensagem de erro para stdout dizendo-lhes que não poderíamos fazer a configuração prometida e eles precisam atualizar o arquivo conf manualmente.

Como posso verificar, em vez disso, o comando perl conseguiu localizar & substituir alguma coisa quando eu corro?

    
por dsollen 26.06.2017 / 18:43

1 resposta

3

Dentro do perl pode-se calcular o número de substituições e indicar uma falha se o número esperado não tiver sido feito com a desvantagem de ter que manter o número de subs, risco de falsos positivos, etc.

$ (echo cat; echo dog) \
  | perl -ple '$s += s/cat/gato/; $s += s/dog/perro/;' \
    -e 'END { die "incomplete sub" if $s != 2 }'

Ou fora, escreva os dados substituídos em um novo arquivo e confirme se newfile é diferente do original file :

perl ... file > newfile
cmp file newfile && echo >&2 "error unchanged"

A desvantagem deste formulário é que ele só pode detectar se as alterações no forem feitas, e não quando algumas das substituições totais falharem.

    
por 26.06.2017 / 19:04

Tags