让人抓狂的换行符
2010/11/02 19:23
未分类
我的一个自动备份脚本,一直运行正常。
前几天编辑了一下,往里面新添加了一个需要自动备份的mysql数据库,结果cron自动执行这个sh文件就开始出错了。我手动运行这个sh也出错,生成的sql文件一律提示不存在。
最后发现是纠结的换行符的问题。Google来的一段话:
如果我们是在windows上编辑的shell文件,上传到linux上,执行的时候可能会出现一些莫名其妙的问题,其原因是在windows上编辑的文件每一行的结尾会有一个回车换行符(十六进制代码为0d0a),而在linux上的文件换行符为0a,0d会莫名其妙的变成一个^M非可见字符。而这个字符会被shell文件读到,影响命令的正常执行。
所以,当我们的linux上的shell文件出现奇怪的问题时我们不妨使用命令cat -A filename来看一下文件中行结尾是不是有^M这个东西,如果有需要把它处理掉。处理办法有如下两个:
1、使用命令cat filename | col > newfile 注意这个命令不支持汉字,如果filename文件
中有汉字的话转换将出现问题。即使汉字是出现在注释中也不行。
2、使用dos2unix filename 命令转换。
我用方法1处理过之后的sh文件终于运行正常了……
可以在vi里面批量替换
:%s#^M##g
^M 是一个字符,按下ctrl再键入vm,输出就是 ^M
这么神奇的东西,还是不要碰到的好
暂时没碰到过。