关于操作系统换行符(CRLF)
Dos与Linux换行符不同,利用cat –A 来观察Dos和Linux建立的文件格式。
$
在Dos中使用的换行符为^M
(
这
里
有
一
个
美
元
符
号
没
有
显
示
出
来
,
不
知
道
问
什
么
这
里
不
支
持
这
种
格
式
)
,
称
之
为
C
R
与
L
F
两
个
符
号
。
而
在
L
i
n
u
x
操
作
系
统
中
,
仅
有
L
F
(
(这里有一个美元符号没有显示出来,不知道问什么这里不支持这种格式),称之为CR与LF两个符号。而在Linux操作系统中,仅有LF(
(这里有一个美元符号没有显示出来,不知道问什么这里不支持这种格式),称之为CR与LF两个符号。而在Linux操作系统中,仅有LF()这个换行符,这个换行符对于Linux系统的影响很大。
由于换行符导致的shell无法执行情况:
在开始执行Linux命令时,判断依据是Enter,而Linux的Enter为LF符号,由于Dos的换行符是CRLF,就多了一个^M符号,在这种情况下,如果执行一个Shell脚本,将可能造成程序无法执行的情况。
解决方式:
dos2unix [-kn] file [newfile]
unix2dos [-kn] file [newfile]
-k:保留该文件原来的mtime格式
-n:保留原来的文件,将转换后的内容输出到新文件
操作系统可能未安装此命令。
使用VI编辑器解决换行符问题:
使用VI编辑器命令模式:
set fileformat=unix
set fileformat=dos
项目中实际遇到的坑:
1、部署版本时,打出来的包中包含的启动脚本因为Git版本管理,文件换行符全部为CRLF,导致的启动脚本启动不生效。
2、使用jar包生成了一个文件目录清单,然后使用shell读取清单进行rm删除,结果导致 rm -rf 失效,不能删除文件。