検索とgrepパイプラインの信号13(SIGPIPE)エラーの修正

検索とgrepパイプラインの信号13(SIGPIPE)エラーの修正

システムにソフトウェアをインストールしようとしている状況に直面しました。

私はfakerootメソッドを使用して別のディレクトリにインストールしました。ここでは、それらがインストールしたすべてのファイル、ディレクトリ、およびリンクを3つのファイルにリストしましたFILESDIRSLINKS

次にfindを使用して、という名前のファイル内のすべてのファイルのSHA1ハッシュを取得しますsha1sumssha1sumsファイル自体のハッシュは必要ありません。だから私はこのコマンドを使いました。

 find . -type f -exec sha1sum {} \; | grep -ve "\./sha1sums$" >sha1sums

これは素晴らしい作品です。しかし、インストール中にkbd-2.0.3多くの行エラーが発生しました。

 find: 'sha1sum' terminated by signal 13

私は信号13が信号SIGPIPE(「壊れたパイプ」)であることを知っています。しかし、私は2つを理解していません。

  1. なぜこのパッケージでこれが起こるのですか?
  2. これはgrep、読み取りパイプを閉じることによって発生する可能性があります。しかし、なぜ閉じるのですか?

ベストアンサー1

あなたが使用するすべてのユーティリティのGNUバージョンまたはデフォルトのOpenBSDユーティリティを使用して実際に問題を再現することはできません。ディスクが破損していませんか?

ただし、特定のファイルのSHA1ダイジェスト計算を省略し、代わりにパイプを介してsha1sumsファイル名をフィルタリングできます。grep

find . -type f ! -path './sha1sums' -exec sha1sum {} + >sha1sums

否定的なテストは、に渡されたパス名のリストから-pathパス名を削除します。./sha1sumssha1sum

+最後に、ユーティリティは名前ごとに一度ではなく、一度にできるだけ多くのファイル名で呼び出されます。

SIGPIPEパイプを使用しないので問題はありません。

おすすめ記事