Symptom###
Dos和Linux下面的断行字符是不一样的,至于哪里不一样的呢,先举个例子看一看
Cause###
我们也可以使用cat -A filename
分别查看Dos和Linux下创建的文件,会发现Dos下面以^M$
作为断行符,称为CR与LF
两个字符(\r\n),Linux下面仅以$(LF)
作为断行符(\n)。这个断行符对Linux影响是很大的,如果这一点不清楚在编写shell的时候很容易踩进坑,却不知道问题在哪,说多了都是泪。
Linux下命令在开始执行的时候它的判断依据是Enter
,linux的Enter
为LF
符号。而Dos下面多了一个^M
符号。在这样的情况下,如果是一个shell script 的程序文件,将可能造成程序不能运行的状态。
所以不建议在Win下面把文件编辑好再上传到服务器这种做法,这样会很容易出现错误,如果你这样做了,并且出现了问题,请往下面看。
Resolution###
将格式转化为Linux即可,一种可行的方式是使用命令来进行格式转换dos2unix
。
dos2unix [-kn] file [newfile]
-k:保留该文件的mtime,即不更新文件的上次的修订实践
-n:保留原本的旧文件,如果将转换后的内容输出到新的文件,如:dos2unix -n old new
相应对的还有unix2dos,这里就不做赘述。