问题
经常会遇到这个问题,一个shell脚本在windows上打开好好的,编辑好后放到linux下却无法正常运行;在linux下打开该脚本,发现文件最后多了些 ^M,这是个什么东东,心里是不是很懵逼,且看以下分析把。
DOS 和 windows 使用 回车+ 换行(CR+LF)两个符号作为结束符,显示为 ^M$。如下图所示:
Linux 则仅使用LF ( $ ) 作为结束符 ,显示为$。如下图所示:
因此,DOS下编辑的文件会比Linux下多一个回车符^M,会导致DOS下编辑的文件到了Linux下无法被执行。(如shell脚本)
将DOS文件与Linux文件转换,可以使用 dos2unix 和 unix2dos命令。
dos2unix [-kn] file [newfile]
unix2dos [-kn] file [newfile]
-k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间)
-n :保留原本的旧文件,将转换后的内容输出到新文件,如: dos2unix -n old new
也可以采用sed命令进行替换,将DOS文件转为Linux文件,如下:
sed -i 's/^M//g' /test.c
说明: DOS 转 unix格式(^M的输入方式是Ctrl+v,Ctrl+m)