我正在尝试编译 NIST 生物识别图像软件,但一整天都遇到麻烦。我终于正确检查了源代码,并且毫无问题地安装了cygwin(我过去使用过它),但是当我去编译时,我得到了这个错误:
$ sh setup.sh </cygdrive/c/NBIS> [--without-X11]
setup.sh: line 94: syntax error near unexpected token `$'in\r''
'etup.sh: line 94: ` case $1 in
现在我确信任何高级编码员都会前往 setup.sh 并寻找问题,但我并不是一个真正的编码员(我只是编译这个,因为没有预编译的包)所以我不不知道该怎么办。我没有使用 cygwin 安装任何库,我只是将所有内容保留为默认值。我正在尝试遵循 NBIS 手册,但我不太理解它,所以我很挣扎。也许看看它,你可能会注意到我错过了一些东西:http://www.nist.gov/customcf/get_pdf.cfm?pub_id=51097
奔跑
sed -i 's/\r//' setup.sh
修复行尾
这是行尾不匹配的症状。
要将
setup.sh
转换为 Cygwin 上的 Unix 行结尾,请使用
dos2unix setup.sh
将 example.sh 文件转换为 unix 的简单方法是使用 NotePad++(编辑>EOL 转换>UNIX/OSX 格式)
您还可以在记事本++中设置默认EOL(设置>首选项>新文档/默认目录>在格式框下选择Unix/OSX)
Windows 使用两个字符(CR 和 LF,或
\r\n
)来标记文本文件中的行结束。 Unix、Linux 和(默认情况下)Cygwin 使用单个 LF 或 '
' 特点。一些 Cygwin 工具能够处理任一格式,但 sh 通常不能。
看起来
setup.sh
使用了 Windows 风格的行结尾——或者至少第 94 行是这样的。
我没有找到源代码的下载,但如果它们作为 zip 文件分发,您可能需要使用带有
unzip
选项的 Cygwin -a
命令来提取它们,因此任何行结尾都会自动转换.
但我怀疑事情远不止于此。分发的
setup.sh
文件一开始就不应该有任何 Windows 风格的行结尾,如果有的话,我不知道为什么问题直到第 94 行才出现。
如果你可以发布源码下载的网址,我会看一下
setup.exe
。