• 由于Windows和Linux行尾标识引起脚本无法运行的解决


      在所有的操作系统中,文本文件的结束或者换行都是有行尾符来标识的,C语言中经常使用 作为换行, 作为跳格TAB;实际上在计算机还没有真正出现之前,有种电传打字机的设备,每秒钟可以打印10个字符,但是这个家伙有一个问题,就是打完一行再换行的时候,要用去0.2秒的时间,如果在这0.2s的时间内有新的字符数据传递过来,那么该字符将会丢失;于是开发人员想到了一个办法,就是在每行结束的时候,加2个表示结束的字符,一个叫做"回车",字面意思是告诉打印机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行,这样这两个字符正好填充这些中间操作的时间,保证了数据的完整性,以上就是"回车","换行"概念的大致由来。后来计算机发明了,也沿用了这个概念,当时存储器存储空间很小,价格也很昂贵,所以一些科学家认为给换行加一个字符就够了,两个字符太浪费,逐渐就出现了一些分歧,最终形成的结果就是:Unix系统每行结尾是" ",Windows系统每行结尾是" ",Mac系统每行结尾是" "。所以导致的问题是: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的" "换行,还是Linux的" "换行,程序的代码解释都不会有任何问题,因为每行代码后允许空格,tab,注释等多种字符,所以多个^M都是不影响的,出现这种问题,一般就是上面的脚本代码第一行声明的时候需要严格遵守即可

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

      方法一,执行如下命令:

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

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

      

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

      方法二使用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

    http://www.cnblogs.com/freeweb/p/5194614.html

  • 相关阅读:
    JAVA集合框架01
    java基础===>点餐系统
    java基础===>数组的应用
    java基础===>双重循环打印图形
    java基础 ===》循环结构
    JAVA基础==>witch的应用!
    选择结构!
    路由系统
    flask使用及返回值、配置文件的四种方式
    短信验证码操作
  • 原文地址:https://www.cnblogs.com/findumars/p/9327059.html
Copyright © 2020-2023  润新知