xzcmp não funciona para alguns arquivos. (Erro interno de tubo 141?)

1

Estou usando xzcmp para comparar vários arquivos XZ. Mas eu tenho um problema estranho: para alguns arquivos (*), o xzcmp não funciona e retorna o código de saída 2, sem mensagem de erro.

zxcmp version1.sql.xz version2.sql.xz 
echo $?    <-- 2

Não sei explicar por que esses arquivos são especiais, já que ambos os arquivos podem ser extraídos normalmente usando xz.

xz -dc version1.sql.xz > version1.sql
xz -dc version2.sql.xz > version2.sql
cmp version1.sql version2.sql
echo $?    <-- 1. works!

Eu depurei / usr / bin / xzcmp e descobri que o seguinte comando é executado e retorna status de saída 141 :

      elif # Reject Solaris 8's buggy /bin/bash 2.03.
          echo X | (echo X | eval "$cmp" /dev/fd/5 - >/dev/null 2>&1) 5<&0; then
        xz_status=$(
          exec 4>&1
          ($xz1 -cdfq -- "$1" 4>&-; echo $? >&4) 3>&- |
            ( ($xz2 -cdfq -- "$2" 4>&-; echo $? >&4) 3>&- 5<&- </dev/null |
            eval "$cmp" /dev/fd/5 - >&3) 5<&0
        )

Para ser honesto, não entendo esse código e não consigo descobrir por que ele funciona para a maioria dos arquivos e não funciona para outros arquivos.

Estou usando o Debian 8.

Já tentei outra coisa:

cmp <( xz -dc "version1.sql.xz" )  <( xz -dc "version2.sql.xz" )
echo $?    <-- 1. works!

Esta solução também funciona. Mas essa variante simples tem o grande problema que erros na execução do xz não serão percebidos ...

Cada dica é muito apreciada.

(*) Lamento que "Alguns arquivos não funcionam" não é informativo. Todos os arquivos são dumps SQL e foram todos compactados usando xz com nível de compactação 3. Quase não há semelhanças entre arquivos que funcionam e arquivos que não funcionam.

    
por Daniel Marschall 18.11.2016 / 18:15

0 respostas