首页 技术 正文
技术 2022年11月6日
0 收藏 995 点赞 728 浏览 1481 个字

  在所有的操作系统中,文本文件的结束或者换行都是有行尾符来标识的,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源文件,并且运行无误:

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

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

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

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

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

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

  这说明一个问题是,所有程序的源代码无论是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就一并打好了,只有这个方法输入才是可以的,其他字符输入都一样

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

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

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

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

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

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,581
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918