我在安装时遇到问题鹰在我的 Linux (debian 8 jessie) 计算机上。我正在阅读安装程序脚本,当我注意到安装脚本中有安装脚本的校验和时?
我在评论中修改了脚本中的 1 个字符,突然间我得到了
“./eagle-lin-7.2.0.run”中的校验和错误
这是如何运作的?在将其放入脚本之前您不需要知道校验和吗?对我来说这似乎是自相矛盾的。有人可以解释一下如何将整个脚本的校验和放入脚本中吗?
这个特定的校验和是 MD5。
答案1
我下载了这个安装程序并看了一眼。以下是相关代码片段:
#!/bin/bash
MD5=1fe8463da9322ad9c966a57b92569a52
# The required tools:
SED=sed
MD5SUM=md5sum
CUT=cut
DATA="$SED -e '1,/^__DATA__$/d' '$0'"
# Check archive integrity:
test `eval $DATA | $MD5SUM | $CUT -d " " -f 1` = $MD5 || {
echo "Checksum error in '$0'" >&2
exit 1
}
# ...
exit 0
# Everything after the next line is a .tar.bz2 file
__DATA__
[a binary blob finishes the file]
这sed -e '1,/^__DATA__$/d'
在脚本本身上运行,它删除从开头(第 1 行)到该__DATA__
行的所有行,只留下二进制文件。然后运行二进制文件md5sum
以获取校验和,cut
然后将其格式化为仅包含校验和本身(无文件名),然后将其与脚本前面的硬编码校验和进行比较。
当 MD5 匹配时,该test
语句返回 true,不匹配时返回 false。意志||
短路当测试为真时,意味着它停止评估。仅当测试为 false 时才会运行括号内的节。
由于您可能没有(故意)触摸该__DATA__
行之后的任何内容,因此这可能是您的文本编辑器的错误。我怀疑它添加了空格或空行,或者它在 DOS 和 UNIX 行格式之间进行了转换(在维基百科上了解有关换行符的更多信息)。
另一种可能性是下载失败并且文件已损坏。如果这不是问题,只需exit 1
从 MD5 测试节中删除该行,安装程序就应该可以正常工作。
(这个脚本写得不好,所以我对你必须修改它才能使其工作一点也不感到惊讶。)