我遇到了一种情况,我正在尝试将软件安装到我的系统中。
我使用 fakeroot 方法将它们安装在一个单独的目录中,在该目录中我列出了它们安装到三个文件中的所有文件、目录和链接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
信号(“管道破裂”)。但我不明白两件事:
- 为什么只有这个包会出现这种情况?
- 这可能是由于
grep
关闭读取管道引起的。但为什么要关闭它呢?
答案1
我实际上无法使用您使用的所有实用程序的 GNU 版本或我的本机 OpenBSD 实用程序重现您的问题。会不会是磁盘坏了?
但是,您可以完全省略计算该特定文件的 SHA1 摘要,而不是sha1sums
通过管道过滤掉文件名:grep
find . -type f ! -path './sha1sums' -exec sha1sum {} + >sha1sums
否定测试将从传递给 的路径名列表中-path
删除该路径名。./sha1sums
sha1sum
+
此外,由于最后的,该实用程序将一次性使用尽可能多的文件名调用,而不是每个名称调用一次。
由于这不使用管道,所以不会有SIGPIPE
问题。