换行符CRLF导致shell命令失效的问题

关于操作系统换行符(CRLF)

Dos与Linux换行符不同,利用cat –A 来观察Dos和Linux建立的文件格式。
$
在Dos中使用的换行符为^M ( 这 里 有 一 个 美 元 符 号 没 有 显 示 出 来 , 不 知 道 问 什 么 这 里 不 支 持 这 种 格 式 ) , 称 之 为 C R 与 L F 两 个 符 号 。 而 在 L i n u x 操 作 系 统 中 , 仅 有 L F ( (这里有一个美元符号没有显示出来,不知道问什么这里不支持这种格式),称之为CR与LF两个符号。而在Linux操作系统中,仅有LF( CRLFLinuxLF)这个换行符,这个换行符对于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 失效,不能删除文件。

你可能感兴趣的:(运维和工具)