在协助客户实现一个功能的时候,有一个文件在windows下用Sublime编辑完后,直接复制到Linux下使用,结果导致了死机问题。
排解了一个晚上都没找到原因,虽然想到是不同系统格式的问题,只是之前Sublime这么用都正常,也就一直没深挖。
虽然最后问题解决了,还是要在这里总结下,以免重蹈覆辙。
CRLF的意思就是回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n),这两个ACSII字符不会在屏幕有任何输出,在Windows中用来标识一行的结束。
Linux/UNIX系统中只有换行符(LF, ASCII 10, \n)。
在windows下编辑的文件可用dos2unix命令转换:
$dos2unix allcast.conf
dos2unix: converting file allcast.conf to UNIX format ...如何检查文件是CRLF结尾,还是Linux的\n结尾,可以用命令file:
下面的表示CRLF结尾:
file version.conf
version.conf: ASCII text, with CRLF line terminators下面的表示是LF(\n)结尾:
$file allcast.conf
allcast.conf: ASCII text那为什么Sublime会出现这样的问题呢?
打开Perference->Setting-default中找到default_line_ending,这个参数有三 个可用选项:system,windows,unix,system是根据当前系统情况设置,windows使用的
CRLF,unix使用的是 LF。按你的情况,应该把Setting-User中设
置"default_line_ending":"unix"就可以解决这个问题不会乱改原文件的换行符了。如下所示:
// Determines what character(s) are used to terminate each line in new files.
// Valid values are 'system' (whatever the OS uses), 'windows' (CRLF) and
// 'unix' (LF only).
"default_line_ending": "unix",