読み取り停止時のパイプ破損エラー

読み取り停止時のパイプ破損エラー

両方のFLACファイルのオーディオコンテンツを一時ファイルにデコードせずに比較するための高速で汚れたbash機能を作成しようとしています。コマンドラインツールを使用してflac各ファイルを名前付きパイプにデコードし、次に接続しました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
}

ファイルが同じ場合、スクリプトは正常に動作します。ただし、異なる場合はパイプ破損エラーが発生します。

[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"

cmpパイプの書き込み端がまだアクティブの間、最初の不一致が発生するとすぐに読み取りが停止するためと思います。私の質問は、この仮定が正しいか、壊れたパイプエラーを防ぎ、スクリプトを修正できるかどうかです。

ベストアンサー1

使用:

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)

おすすめ記事