Erro de cano quebrado ao ler paradas

1

Estou tentando fazer uma rápida & Função bash suja para comparar o conteúdo de áudio de dois arquivos FLAC sem decodificá-los em um arquivo temporário. Com a ferramenta de linha de comando flac , estou decodificando cada arquivo em um pipe nomeado e, em seguida, comparando-os com cmp :

function flacdiff {
        local pipe1="/tmp/$(randomString)"
        mkfifo "$pipe1" 
        flac --silent --decode --force-raw-format --sign=signed --endian=little "$1" --stdout > "$pipe1" &

        local pipe2="/tmp/$(randomString)"
        mkfifo "$pipe2"
        flac --silent --decode --force-raw-format --sign=signed --endian=little "$2" --stdout > "$pipe2" &

        cmp -b "$pipe1" "$pipe2"
        local result=$?

        rm "$pipe1"
        rm "$pipe2"

        return $result
}

Se os arquivos forem idênticos, o script funcionará corretamente. No entanto, se forem diferentes, recebo um erro de canal quebrado:

[1]-  Broken pipe: 13         flac --silent --decode --force-raw-format --sign=signed --endian=little "$1" --stdout > "$pipe1"
[2]+  Broken pipe: 13         flac --silent --decode --force-raw-format --sign=signed --endian=little "$2" --stdout > "$pipe2"

Suponho que isso ocorra porque cmp pára de ler assim que encontra a primeira incompatibilidade enquanto a extremidade de gravação dos pipes ainda está ativa. Minha pergunta é se essa hipótese é verdadeira e se é possível evitar esses erros de tubulação quebrados e consertar meu script?

    
por Tamás Zahola 13.01.2016 / 19:48

1 resposta

0

Uso:

cmp -s \
    <(flac --silent --decode --force-raw-format --sign=signed --endian=little "$1" --stdout) \
    <(flac --silent --decode --force-raw-format --sign=signed --endian=little "$2" --stdout)
    
por 13.01.2016 / 21:38