2つの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
が読み取りを停止するためだと思います。私の質問は、この仮説が正しいかどうか、そしてこれらの壊れたパイプエラーを回避してスクリプトを修正することが可能かどうかです。
使用する:
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)