54

我正在尝试编译 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 手册,但我不太了解它,所以我很挣扎。Maybye 看看它,你可能会注意到我错过了一些东西:http ://www.nist.gov/customcf/get_pdf.cfm?pub_id=51097

4

5 回答 5

68

这是行尾不匹配的症状。

要在 Cygwin 上转换setup.sh为 Unix 行尾,请使用

dos2unix setup.sh
于 2012-05-04T15:08:31.040 回答
63

sed -i 's/\r//' setup.sh

修复你的行尾

于 2016-05-29T12:42:32.230 回答
18

将 example.sh 文件转换为 unix 的简单方法是使用 NotePad++(编辑>EOL 转换>UNIX/OSX 格式)

您还可以在记事本++中设置默认EOL(设置>首选项>新建文档/默认目录>在格式框下选择Unix/OSX)

于 2015-05-13T09:18:07.410 回答
11

Windows 使用两个字符(CR 和 LF,或\r\n)来标记文本文件中的行尾。Unix、Linux 和(默认情况下)Cygwin 使用单个 LF 或 '\n' 字符。一些 Cygwin 工具能够处理任何一种格式,但 sh 通常不能。

它看起来像setup.sh使用 Windows 风格的行尾——或者至少第 94 行。

我没有找到源代码的下载,但如果它们以 zip 文件的形式分发,您可能需要使用unzip带有选项的 Cygwin 命令提取它们-a,因此任何行结尾都会自动转换。

但我怀疑还有更多的东西。分发的setup.sh文件首先不应该有任何 Windows 样式的行结尾,如果有,我不知道为什么问题直到第 94 行才会出现。

如果您可以发布源下载的 URL,我会看看setup.exe.

于 2011-08-24T01:30:57.940 回答
10

在 pycharm 中,您可以通过单击CRLF屏幕右下角的字母并选择来快速更改行尾LF

pycharm 行尾位置

于 2019-10-29T20:12:36.100 回答