linux shell脚本错误/bin/sh^M以及dos2unix

  bash:  /updateD.sh: /bin/sh^M: bad interpreter: No such file or directory这个错误是因为unix标准和window标准不一样造成的.

  解决办法:(1)使用dos2unix工具强转: dos2unix updateD.sh

                                 然后你的脚本就能正常运行了.

                    (2)使用vim编辑器来转换

                                 用vim打开你的脚本文件, 运行:ser ff,你可以看到fileformat=dos的字样; 运行:set ff=unix, 然后wq保存退出,你的脚本也就能正常运行了



  最近写了个脚本,用ssh拷贝到服务器上运行的时候就能正常运行,但是用自己的协议上传到服务器上就总是运行报错:bash:  /updateD.sh: /bin/sh^M: bad interpreter: No such file or directory

  为什么之前传的文件都没有问题,而现在脚本出现问题了呢 .我一开始以为是上传文件的时候数据失真了,然后还特意cat了一下.发现文件中的内容完全是一样的.可是运行就是报错.郁闷了我好一会儿.于是我又把这个文件下载下来,用compare比较了一下,完全相同...这是什么鬼!!!我的神啊. 因为用ssh上传的能运行,抱着尝试的心态,我就把用文件上传的文件,通过ssh下载下来,然后上传,咦,就能运行了.真是醉了.不经意间ll了一下,发现ssh上传的文件,跟用自己的协议上传的文件大小不一样...可能应该是有不可见字符造成的.把两个不同大小的文件在notpad++中打开->显示所有字符.惊呆了我,果真不一样,能运行的是以LF结尾的,不能运行的是以CRLF结尾的.("\n"=>LF;"\r\n"=>CRLF).


  其实出现这样的情况是应为:unix标准和windows标准不一样的原因造成的.

  unix行结尾以"\n"

  windows行结尾是"\r\n"

 

  我用自己的协议上传文件的时候,是把文件按原样子,每个字节都不变的上传的.但是ssh在上传下载的时候,或特意的注意这个结束符转换的问题.所以为什么,ssh上传能运行,用我自己的协议上传的脚本就不能运行了.文件会大一点,就是因为每行多了一个'/r'字符.因为是不可见字符,所以一般不好发现.


  找到方法,用vim可以转换,用dos2unix可以转换,但是我就是想用自己的协议去执行命令,使用vim不方便.必须要用dos2unix工具才好,但是服务器上恰好又没有这个工具........所以这里顺便讲一下dos2unix工具的安装方法.很简单.

  到他的官网上http://waterlan.home.xs4all.nl/dos2unix.html下载源码(dos2unix-7.3.5.tar.gz)

  (1)把文件放到你的linux变异环境

  (2)解压:tar -xvf dos2unix-7.3.5.tar.gz

  (3)进入到解压出的文件夹

  (4)编译:make

  (5)安装到你的系统:make install

    然后你就拥有了dos2unix工具了.顺便说一下,同时还有一个反向工具unix2dos.我想不用多解释.

   如果你不想安装到系统,就不要make install,直接拷贝里面的可执行文件dos2unix使用也是一样的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值