cygwin $'\r': 找不到命令错误

Posted

技术标签:

【中文标题】cygwin $\'\\r\': 找不到命令错误【英文标题】:cygwin $'\r': command not found errorcygwin $'\r': 找不到命令错误 【发布时间】:2017-04-29 07:43:28 【问题描述】:

我稍微修改了一个项目,在调试下它运行良好。当我尝试在不调试的情况下构建它时,它显示错误,无法修复。

        $ make
        Making all in third_party
        make[1]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
        Making all in zdelta-2.1
        make[2]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party/zdelta-2.1'
        gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inffast.o -MD -MP -MF .deps/inffast.Tpo -c -o inffast.     o inffast.c
        mv -f .deps/inffast.Tpo .deps/inffast.Po
        gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inflate.o -MD -MP -MF .deps/inflate.Tpo -c -o inflate.     o inflate.c
       mv -f .deps/inflate.Tpo .deps/inflate.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT inftrees.o -MD -MP -MF .deps/inftrees.Tpo -c -o inftre     es.o inftrees.c
       mv -f .deps/inftrees.Tpo .deps/inftrees.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT infutil.o -MD -MP -MF .deps/infutil.Tpo -c -o infutil.     o infutil.c
       mv -f .deps/infutil.Tpo .deps/infutil.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT adler32.o -MD -MP -MF .deps/adler32.Tpo -c -o adler32.     o adler32.c
       mv -f .deps/adler32.Tpo .deps/adler32.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT zd_mem.o -MD -MP -MF .deps/zd_mem.Tpo -c -o zd_mem.o z     d_mem.c
       mv -f .deps/zd_mem.Tpo .deps/zd_mem.Po
       gcc -DHAVE_CONFIG_H -I. -I../../src     -Wall -export-dynamic -O3  -fopenmp -MT zutil.o -MD -MP -MF .deps/zutil.Tpo -c -o zutil.o zuti     l.c
       mv -f .deps/zutil.Tpo .deps/zutil.Po
       rm -f libzd_in_slim.a
       ar cru libzd_in_slim.a deflate.o infblock.o infcodes.o inffast.o 
       inflate.o inftrees.o infutil.o adler32.o trees.o zd_mem.o zdelta.o zu     til.o
       ranlib libzd_in_slim.a
       make[2]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party/zdelta-2.1'
       make[2]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      make[2]: Nothing to be done for 'all-am'.
      make[2]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      make[1]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/third_party'
      Making all in src
      make[1]: Entering directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/src'
      /bin/sh ./genconfig
      ./genconfig: line 2: $'\r': command not found
      ./genconfig: line 8: $'\r': command not found
      ./genconfig: line 10: $'\r': command not found
      ./genconfig: line 13: $'\r': command not found
      ./genconfig: line 16: $'\r': command not found
      ./genconfig: line 19: $'\r': command not found
      ./genconfig: line 20: $'cat\r': command not found
      ./genconfig: line 21: $'cat\r': command not found
      ./genconfig: line 22: $'\r': command not found
      ./genconfig: line 61: $'\r': command not found
      ./genconfig: line 62: $'\r': command not found
      ./genconfig: line 86: $'\r': command not found
      ./genconfig: line 87: $'\r': command not found
      ./genconfig: line 88: $'\r': command not found
      make[1]: *** [Makefile:1558: arch.h] Error 127
       make[1]: Leaving directory '/cygdrive/c/Users/alimjan/Documents/fast-hlground/slim-2.2.7/src'
       make: *** [Makefile:425: all-recursive] Error 1

现在,我无法在有/没有调试的情况下构建它。 我怎样才能解决这个问题? 请帮忙

【问题讨论】:

可能是 Windows 行尾 \r\n 而不仅仅是 \n。请参阅this 答案。 @PaulRooney 你的意思是在 c 程序中使用 '\r\n' 而不是 '\n'? 无论genconfig 正在读取什么文件,都会导致它对\r(回车)字符感到不满,这是从Windows 复制文本文件而没有删除回车的典型症状返回。 【参考方案1】:

genconfig 是一个 shell 脚本,它是用 DOS 行结尾编写的。运行脚本时,此行结尾会混淆/bin/sh shell。您应该使用dos2unix 转换为unix 行尾。

【讨论】:

我正在安装 dost2unix。所以我必须在 genconfig 上运行一次? 我运行它为“:dostounix genconfig”,然后运行“./configure”和“make”,还是不行。我做错了吗? @arslan 你可以重新运行 dos2unix 并在没有 ./configure 的情况下再次运行 make 吗? 还有另一个“genconfig.in”文件。在“genconfig”和“genconfi.in”上运行 dos2unit 后,它就可以工作了。你帮了我很多,现在我可以睡觉了,哈哈!谢谢你:)【参考方案2】:

使用记事本、notepad++(已测试)等编辑器在 Windows 中编写脚本时出现行尾(EOL)转换问题。

Notepad++ 有一个转换 END OF LINE CONVERSION(EOL) 的选项。如何做到这一点:去编辑> EOL转换>选择Unix/OSX

给你,保存脚本文件并运行它。它会工作的。

【讨论】:

以上是关于cygwin $'\r': 找不到命令错误的主要内容,如果未能解决你的问题,请参考以下文章

cygwin输入 ls命令为啥总是返回命令找不到

cygwin找不到su命令

在 Cygwin 上找不到 sudo 命令

MSYS 错误“rem:找不到命令”

制作:c:找不到命令

/bin/sh: pkg-config: 找不到命令