为何在Windows中编写的shell脚本放置到Linux中就无法正常运行呢?罪魁祸首尽然是“换行符机制”。
Windows换行符^M$
Linux换行符$
大家可以通过cat -A [filename]的指令去看看自己文件。
Shell中,如果是经过在Windows中编辑的文件,那么就会多出^M,那么自然就没有办法正常执行了。
找到了原因,那么我们是否需要vim -b [filename],然后一行一行得去删除^M呢?答案当然是否定的,我们可以通过工具dos2unix来实现。(孪生兄弟unix2dos)
dos2unix [-kn] infile [outfile]
-k --keepdate
Keep the date stamp of output file same as input file.
-n --newfile infile outfile ...
New file mode. Convert the infile and write output to outfile. File names must be given in pairs and wildcard names should NOT be used or
you WILL lose your files.
示例1、 将文件infile从dos格式转换成unix格式
dos2unix infile
示例2、将文件infile从dos格式转换成unix格式,但是不改变文件时间戳
dos2unix -k infile
示例3、将文件infile从dos格式转换成unix格式,写入文件outfile,infile文件保留
dos2unix -n infile outfile
示例4、完成示例3功能,outfile与infile的时间戳保持一致
dos2unix -kn infile outfile