【问题标题】:syntax error near unexpected token `$'in\r''意外标记 `$'in\r'' 附近的语法错误
【发布时间】:2011-09-22 08:36: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

【问题讨论】:

  • 这里的每个人似乎都建议答案是使用 linux 样式的换行符,如果您需要使用 windows 样式的换行符运行 bash 脚本,有人知道该怎么做吗?

标签: cygwin syntax-error token biometrics


【解决方案1】:

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

看起来setup.sh 使用了 Windows 样式的行尾——或者至少第 94 行使用了。

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

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

如果你能把源码下载的网址贴出来,我看看setup.exe

【讨论】:

    【解决方案2】:

    这是行尾不匹配的症状。

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

    dos2unix setup.sh
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢,为我工作。我在 Windows 10 中的 Linux Ubuntu 子系统上编译 Shell 脚本时遇到了这个问题,但是在 notepad++ 中而不是 vim 或通过 nano 输入命令。
      【解决方案4】:

      运行

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

      修正你的行尾

      【讨论】:

      • sed -i 's/\r//' setup.sh 有效!!
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-31
        • 2012-10-20
        • 2012-09-29
        • 2013-12-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        相关资源
        最近更新 更多