Como posso verificar porque o comando diff falhou?

3

Eu estava executando o comando diff --brief -r /home/mateusz/ /media/mateusz/Database/backup_test_tmp_folder/home/mateusz/ que foi concluído com o código de erro 2. Segundo a documentação "O status de saída é 0 se as entradas forem iguais, 1 se diferente, 2 se houver problemas".

Infelizmente, o comando foi encerrado sem dar nenhuma indicação do motivo da falha. Eu tentei usar straces, mas infelizmente não consigo diagnosticar nada com base no log produzido (as últimas 150 linhas do arquivo strace de 3,5 GB são postadas no link - e também para o diff executando com sudo que falhou após produzir 78KB de log strace).

Eu considerei modificar o comando diff para gerar alguma explicação antes de morrer e retornar 2, mas como é improvável que meu programa seja único, a falta de suporte para essa depuração parece indicar que existem soluções melhores (espero que não seja "aprenda" como interpretar strace ").

Então, como devo verificar porque meu comando diff falhou? Existe alguma ferramenta melhor do que strace ou adicionando o comando printf debugging ao comando diff?

    
por Mateusz Konieczny 03.04.2016 / 16:14

1 resposta

1

Você pode ler a saída. diff não fornece códigos de status de saída diferentes, exceto:

  • 0 se as entradas forem iguais,
  • 1 se diferente,
  • 2 se problemas.

(de man diff )

"Problema" significa que não foi possível ler um arquivo ou praticamente qualquer outra coisa.

A partir de um pequeno teste usando diff (GNU diffutils) 3.3 e comparando pastas, diff envia mensagens para stdout ou stderr:

  • Se um arquivo estiver faltando, o status de saída será 1 , e isso aparecerá em stdout :

    Only in folder1: file-a
    
  • Se um arquivo é ilegível, o status de saída é 2 , e isso aparece em stderr :

    diff: folder1/file-b: Permission denied
    

(Se ambos os erros ocorrerem, o status de saída será 2.)

Então, leia / analise stdout e stderr para descobrir quais são os problemas.

Note que o diff continuará processando mais arquivos depois de encontrar "problemas", então a linha relatando o motivo do status de saída 2 pode estar em qualquer parte da saída.

Veja este link GNU "diffutils manual" para mais informações sobre como comparar diretórios (e usando diff em geral, é insanamente mais detalhado que apenas man diff ). Informações como:

% bl0ck_qu0te%

Ou esses Q's relacionados de outros sites:

por Xen2050 04.04.2016 / 14:22