意外标记“$”附近出现语法错误 ''

问题描述 投票:0回答:6

我正在尝试编译 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

cygwin syntax-error token biometrics
6个回答
91
投票

奔跑

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

修复行尾


74
投票

这是行尾不匹配的症状。

要将

setup.sh
转换为 Cygwin 上的 Unix 行结尾,请使用

dos2unix setup.sh

18
投票

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

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


16
投票

在 pycharm 中,您可以通过单击屏幕右下角的字母

CRLF
并选择
LF
来快速更改行结尾。


11
投票

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


0
投票

我曾经遇到过同样的问题,但我使用notepad++解决了它

安装Notepad++,使用Notepad++打开你的shell代码,进入“编辑”菜单,选择“EOL转换”,选择“Unix(LF)”选项,它应该被修复

或者如果您使用 vscode,您可以将

CRLF
更改为
LF

image - 1 image - 2

© www.soinside.com 2019 - 2024. All rights reserved.