Assumir que um código de saída de 0 significa sucesso, qualquer outra coisa significa falha. Esta é a convenção padrão usada por quase todas as ferramentas de linha de comando.
Infelizmente, diff
não é um deles. Verificando a página de informações do diff do GNU, e também a entrada única "diff" da Especificação Unix , 0 significa nenhuma diferença encontrada, 1 significa diferenças encontradas e ≥2 significa erro.
Você pode dizer ao Make para ignorar completamente o status de saída prefixando o comando com um hífen, como fez em seu comentário, mas isso ignorará os erros reais - provavelmente não o que você deseja. Em vez disso, você pode:
patch:
diff -u b a > b2a.patch; [ $$? -eq 1 ]
patch -o b.corrected b < b2a.patch
diff a b.corrected; [ $$? -eq 1 ]
Observe o ; [ $$? -eq 1 ]
bit que adicionei ao final das duas linhas de diff. Você pode usar ; test $$? -eq 1
também, é claro. A variável $?
da shell é $$?
devido às convenções normais de escape do Makefile. Observe que isso também rejeita o status de saída 0 (sem diferenças), que é provavelmente o que você deseja.
BTW: parece que isso realmente deveria ser:
patch: b.corrected
diff …
b.corrected: b2a.patch
patch …
b2a.patch: a b
diff …
para que as modificações de aeb sejam coletadas e os arquivos sejam regenerados corretamente.