在所有的操作系统中,文本文件的结束或者换行都是有行尾符来标识的,C语言中经常使用\n作为换行,\r作为跳格TAB;实际上在计算机还没有真正出现之前,有种电传打字机的设备,每秒钟可以打印10个字符,但是这个家伙有一个问题,就是打完一行再换行的时候,要用去0.2秒的时间,如果在这0.2s的时间内有新的字符数据传递过来,那么该字符将会丢失;于是开发人员想到了一个办法,就是在每行结束的时候,加2个表示结束的字符,一个叫做"回车",字面意思是告诉打印机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行,这样这两个字符正好填充这些中间操作的时间,保证了数据的完整性,以上就是"回车","换行"概念的大致由来。后来计算机发明了,也沿用了这个概念,当时存储器存储空间很小,价格也很昂贵,所以一些科学家认为给换行加一个字符就够了,两个字符太浪费,逐渐就出现了一些分歧,最终形成的结果就是:Unix系统每行结尾是"\n",Windows系统每行结尾是"\r\n",Mac系统每行结尾是"\r"。所以导致的问题是:Unix/Mac下的源文件在Windows下打开,会变成一行;Windows下的源文件在Unix/Mac下每行会被识别多出来一个"^M"这样的特殊字符。所以Windows下的源文件要比Linux/Mac下的文件大上一些,由于这种原因,导致Windows和Linux系统间移植源代码时,开始没有注意,到后来引起让人崩溃的问题,下面简单举个例子

  在Windows下一个简单的python源文件,并且运行无误:

  

  上传到Linux下之后,chmod赋予权限,./test.py会看到如下错误提示:

  

  很明显的看到,是没有python^M这个文件,因为头部是声明的执行环境,包括shell脚本也是一样,

  但是我们用python test.py这样解释器的方式执行是一切正常的

  

  这说明一个问题是,所有程序的源代码无论是Windows的"\r\n"换行,还是Linux的"\n"换行,程序的代码解释都不会有任何问题,因为每行代码后允许空格,tab,注释等多种字符,所以多个^M都是不影响的,出现这种问题,一般就是上面的脚本代码第一行声明的时候需要严格遵守即可

  其实IDE开发环境或者代码编辑器中都可以设置编程风格,在Linux下有最一般的修改方法,下面在Linux下修改:

  方法一,执行如下命令:

sed -i 's/^M//g' test.py 

  注意^M这个输入方法不是输入^再输入M,而是按住Ctrl+V快捷键,然后松开V,Ctrl不松,按M,按完之后^M就一并打好了,只有这个方法输入才是可以的,其他字符输入都一样

  

  现在运行就一切正常了,并且文件比原来小了一个字节,因为只有第一行代码进行了换行,所以就是\r这一个字节

  方法二使用vim打开文件,底行模式下运行命令  :set ff或者:set fileformat可以看到当前文件的换行标识,linux换行返回是fileformat=unix,Windows换行返回是fileformat=dos

   

  所以同样通过以下命令进行修改成Unix风格的换行:

  :set ff=unix或者:set fileformat=unix回车之后,然后:wq保存即可,效果和上面相同,如果转换成windows风格将后面值改为dos即可

  以上就是最基本的使用命令或者vi/vim进行行尾标识转换的方法

http://bbs.chinaunix.net/thread-1495312-1-1.html

由于Windows和Linux行尾标识引起脚本无法运行的解决的更多相关文章

  1. Perl Tk在IC设计中的应用、Windows、Linux平台下的安装-各种错误的摸索解决

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <Perl Tk在IC设计中的应用.Windows.Linux平台下的安装-各种错误的摸索解决> Perl在IC设计中有 ...

  2. 【转】Windows与Linux(Ubuntu)双系统时间不一致的解决方法

    当在嵌入式Linux里面备份文件时候,在备份的时候,PC(win7)和开发板的时间都是9:30,但是在开发板发现文件创建时间是9:30,然后u盘插在PC(win7)上,发现文件创建时间是1:30,为什 ...

  3. linux 使用 lockf命令防止脚本重复运行

    之前服务器的脚本,迁移至一台新的机器上,运行脚本,提示报错信息: -bash: /usr/bin/lockf: 没有那个文件或目录  或 -bash: /usr/bin/lockf:  no such ...

  4. Unity3D脚本行尾(Line Endings)

    行尾不一致(inconsistent line endings ) 开发环境 有时候编辑Unity的脚本文件,代码diff之后,或者从svn更新文件之后,Unity中会出现行尾不一致的信息. 我的开发 ...

  5. windows和linux文本的编码格式不一样所出的错

    windows下编写的python脚本上传的linux下执行会出现错误: usr/bin/python^M: bad interpreter: No such file or directory 原因 ...

  6. python中,如何将多行进行输出,同时将行尾的换行符去掉

    需求说明: 比如我要输出字符串的常量,字符串常量要输出多行,该怎么解决呢 操作过程: 1.可以通过三引号(""" .... """)将要输出 ...

  7. linux shell 用sed命令在文本的行尾或行首添加字符

    转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...

  8. 转:在linux中vi 文件里行尾奇怪的^M及解决

    Linux编辑器vim中删除行尾的^M 有时候,在 Linux 中使用打开曾在 Windows 中编辑过的文件时,会在行尾看到 ^M 字符.看起来总是感觉很别扭. 删除方法如下: 在 Vim 的命令模 ...

  9. linux向文件中添加数据,数据被追加到了上一行的行尾

    当我们在windows上新建了文件,并且要上传到linux上时,一定要在文件后加上空格,否则就会出现标题上讲的,数据被追加到了上一行的行尾,而不是新起一行,但是如果是在linux上新建的文件,则没有这 ...

随机推荐

  1. 10位IT领袖给大学生的忠告

    10位IT领袖给大学生的忠告 苹果创始人史蒂夫乔布斯(Steve Jobs):把每一天都当成生命中的最后一天 在我17岁的时候,我读到了一句箴言,差不多是这样的:“如果你把每一天都当作生命中的最后一天 ...

  2. thinkphp-许愿墙-2

    在数组中,也可以使用函数,如: $data = array( 'username'=> I('username','', 'htmlspecailchars'), 'content'=> ...

  3. 关于Windows下安装mongodb和加入Windows系统启动项

    .首先:在http://www.mongodb.org/downloads官网下载最新的win版本的mongodb下载包(我下载到d盘) .加压缩,修改文件夹名字为mongodb,建立放数据库文件夹w ...

  4. 大熊君大话NodeJS之------Stream模块

    一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流是可读,可写或兼具两者的. 最早接触Stream是从早期的un ...

  5. pyspider安装

    官方文档上说的比较简单: pip install pyspider 但是实际安装时还是有些问题导致无法成功. windows下安装 先安装PhantomJS 可以依照自己的开发平台选择不同的包进行下载 ...

  6. Hadoop 之Impala

    impala 是基于hive的大数据实时分析查询引擎,直接使用Hive的元数据库metadata意味着impala元数据都存储在hive的metadstore中并且impala兼容hive的 sql解 ...

  7. 第六天 做的app不会改变什么

    app包括资源和功能,做完之后没有改变什么

  8. java之stream(jdk8)

    一.stream介绍 参考: Java 8 中的 Streams API 详解   Package java.util.stream   Java8初体验(二)Stream语法详解   二.例子 im ...

  9. gradle类重复的问题解决方法

    今天遇到一个gradle的类重复问题,学习到一个命令 gradle -q dependencies,可以查看项目里包的依赖关系,发生这个错误是因为我用了一个相册的项目,这个项目里用到了v4包,我自己的 ...

  10. ios工程中加入.c/.cpp文件

    如果你在工程里拉入.c/.cpp文件就会导致工程报错, 现在有两种解决方式 1. 把.c文件的后缀全部改成.m的后缀 把.cpp文件的后缀改成.mm的后缀 2. 使用 工程名-Prefix.pch 并 ...