换行符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 失效,不能删除文件。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值