从cygwin程序的输出中剥离^ M

我最近安装了cygwin-x86_64和http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip中的 gtk和http:// protz中的 ocaml 。 github.io/ocaml-installer/ 。 每当我从一个得到“预编译为cygwin”的二进制文件(比如ocaml或者gtk)运行一个命令时,它会在输出结尾附加一个^ M。 例如,

$ ocamlc -where > foo; cat -v foo D:/OCaml/lib^M 

我该如何解决这个问题?

更新:如果我将二进制文件复制到~/ (或其他一些cygwinpath),那么我不会得到^M输出。 只有当二进制文件位于MS DOS位置时才会发生。 有没有办法解决这个问题,而不移动我的二进制文件?

运行mount给出

$ mount D:/cygwin64/bin on /usr/bin type ntfs (binary,auto) D:/cygwin64/lib on /usr/lib type ntfs (binary,auto) D:/cygwin64 on / type ntfs (binary,auto) C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto) D: on /cygdrive/d type ntfs (binary,posix=0,user,noumount,auto) E: on /cygdrive/e type ntfs (binary,posix=0,user,noumount,auto) Y: on /cygdrive/y type afs (binary,posix=0,user,noumount,auto) Z: on /cygdrive/z type afs (binary,posix=0,user,noumount,auto)

^ M是在Windows中使用的Carriage Return ,而不是像Unix系统一样。 使用sed,tr或者你喜欢的工具从文件中删除CR。 如果你在Windows命令行,那么

 tr -d '\r' < foo.txt > bar.txt sed -e 's/\r//g' foo.txt > bar.txt 

如果您使用启用vi模式的终端,那么

 tr -d '^M' < foo.txt > bar.txt sed -e 's/^M//g' foo.txt > bar.txt 

^ M可以通过键Ctrl + M输入

对我来说,通过protz混合cygwin和ocaml-installer是不对的。 最后一个是本地窗口(在该安装程序中,cygwin仅用于提供shell)。 如果你想在cygwin中使用ocaml(使用cygwin gcc编译器和库),那么你必须从cygwin库(通过cygwin-setup.exe)安装ocaml。 本地Windows程序和cygwin编译的程序之间是有区别的,你很难成功地混合它们进行开发。