让人抓狂的换行符

我的一个自动备份脚本,一直运行正常。 前几天编辑了一下,往里面新添加了一个需要自动备份的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文件终于运行正常了……

评论

精彩评论
  • 2010-11-09 13:58:03

    可以在vi里面批量替换
    :%s#^M##g
    ^M 是一个字符,按下ctrl再键入vm,输出就是 ^M

  • 2010-11-06 04:49:50

    这么神奇的东西,还是不要碰到的好