爲何在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