内容简介:syntax error near unexpected token 脚本报错误解决
向朋友要了一个 Shell 脚本来在 Linux 试用,发现执行时就报错:syntax error near unexpected token,仔细查找了还是没找到错误,后来发现脚本内容每行尾行都添加了^M的字符,查看方式:vi -b 打开脚本文件
后来想了下,造成这个的原因应该是脚本有试过拿到Win机器上存放,期间也用Win下的编辑器编辑过。
现在简单整理如下:
使用vim -b命令查看文件内容如下:
每一行多了一个^M有木有?
那么接下来就要搞清楚这个^M是什么东东?
long long long ago ..... 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>,ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>。Apple 开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是换行符。
基本解决方法有三个:
1.用vim编辑器替换
vim -b filename
在命令模式下执行%s/^M//g进行替换
注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。
2.使用dos2unix命令进行转换
Dos2unix在有些版本的系统中默认是安装的。
在Linux中,文本文件用"\n"表示回车换行,而Windows用"\r\n"表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\r\n"转化成"\n",unix2dos把"\n"转化成"\r\n"。
命令dos2unix和unix2dos的使用非常简单,格式为:dos2unix filename
如果想了解更多,可以查看手册。man dos2unix
3.使用文本处理工具
cat filename | tr -d "/r" > newfile 去掉^M生成一个新文件。
同样还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。
另外,在上传到Linux平台过程中,可以选择上传类型为二进制,也可以避免此问题,大家可以试一下
本文永久更新链接地址 : http://www.linuxidc.com/Linux/2017-06/144756.htm
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming Collective Intelligence
Toby Segaran / O'Reilly Media / 2007-8-26 / USD 39.99
Want to tap the power behind search rankings, product recommendations, social bookmarking, and online matchmaking? This fascinating book demonstrates how you can build Web 2.0 applications to mine the......一起来看看 《Programming Collective Intelligence》 这本书的介绍吧!