システムにソフトウェアをインストールしようとしている状況に直面しました。
私はfakerootメソッドを使用して別のディレクトリにインストールしました。ここでは、それらがインストールしたすべてのファイル、ディレクトリ、およびリンクを3つのファイルにリストしましたFILES
。DIRS
LINKS
次にfindを使用して、という名前のファイル内のすべてのファイルのSHA1ハッシュを取得しますsha1sums
。sha1sums
ファイル自体のハッシュは必要ありません。だから私はこのコマンドを使いました。
find . -type f -exec sha1sum {} \; | grep -ve "\./sha1sums$" >sha1sums
これは素晴らしい作品です。しかし、インストール中にkbd-2.0.3
多くの行エラーが発生しました。
find: 'sha1sum' terminated by signal 13
私は信号13が信号SIGPIPE
(「壊れたパイプ」)であることを知っています。しかし、私は2つを理解していません。
- なぜこのパッケージでこれが起こるのですか?
- これは
grep
、読み取りパイプを閉じることによって発生する可能性があります。しかし、なぜ閉じるのですか?
答え1
あなたが使用するすべてのユーティリティのGNUバージョンまたはデフォルトのOpenBSDユーティリティを使用して実際に問題を再現することはできません。ディスクが破損していませんか?
ただし、特定のファイルのSHA1ダイジェスト計算を省略し、代わりにパイプを介してsha1sums
ファイル名をフィルタリングできます。grep
find . -type f ! -path './sha1sums' -exec sha1sum {} + >sha1sums
否定的なテストは、に渡されたパス名のリストから-path
パス名を削除します。./sha1sums
sha1sum
+
最後に、ユーティリティは名前ごとに一度ではなく、一度にできるだけ多くのファイル名で呼び出されます。
SIGPIPE
パイプを使用しないので問題はありません。