xzcmpは一部のファイルでは機能しません。 (内部パイプエラー141?)

xzcmpは一部のファイルでは機能しません。 (内部パイプエラー141?)

xzcmp複数のXZファイルを比較するために使用しています。しかし、奇妙な問題があります。一部のファイル(*)では、xzcmpは機能せず、エラーメッセージなしで終了コード2を返します。

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

これら2つのファイルは通常xzを使用して抽出できるため、このファイルが特別な理由を説明することはできません。

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

/usr/bin/xzcmp をデバッグした結果、次のコマンドが実行され、返されたことが確認されました。終了ステータス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
        )

私は正直なところ、このコードを理解しておらず、ほとんどのファイルでは動作しますが、他のファイルでは動作しない理由はわかりません。

私はDebian 8を使用しています。

しかし、私は別の方法を試しました。

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

このソリューションも機能します。しかし、この単純なバリエーションにはxz実行エラーが目立たないという大きな問題があります。

すべてのヒントを高く評価します。

(*)申し訳ありません。 「一部のファイルが機能しない」という情報は提供されません。すべてのファイルはSQLダンプで、すべてxz、圧縮レベル3を使用して圧縮されます。有効なファイルと無効なファイルの間には類似性はほとんどありません。

ベストアンサー1

おすすめ記事