syntax error near unexpected token(关于跨平台非法字符(^M)的解决方法)

简介:

别人写了一个shell拿过来在linux试用,执行报错如下:

wKioL1hftLrS_aDtAAAXvl4nfLI120.png

仔细查找了还是没找到错误,一直都是报syntax error near unexpected token `{

网上搜索了一下,找到了端倪,现在简单整理如下:

 

现在可以判断给我脚本的这位仁兄很有可能是在windows平台上编写的。使用vim -b命令查看文件内容如下:

wKioL1hftMvAGbJxAACUVoVNPLE714.png 

每一行多了一个^M有木有?

那么接下来就要搞清楚这个^M是什么东东?

long long long ago .....  老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>Apple 开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>

因为MS-DOSWindows是回车+换行来表示换行,因此在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提供了两种文本格式相互转化的命令:dos2unixunix2dosdos2unix"\r\n"转化成"\n"unix2dos"\n"转化成"\r\n"
     命令dos2unixunix2dos的使用非常简单,格式为:dos2unix filename

   如果想了解更多,可以查看手册。man dos2unix

3.使用文本处理工具

 cat filename | tr -d "/r" > newfile 去掉^M生成一个新文件。

同样还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。

 

另外,a.windows平台上通过notepad++工具也可以完成转换,具体参考百度经验http://jingyan.baidu.com/article/9f63fb91d014b8c8410f0e7a.html

 

b.在上传到linux平台过程中,可以选择上传类型为二进制,也可以避免此问题,大家可以试一下

 

wKiom1hftO7B9yxFAADrSoQTDbg234.png

A.

B.

 


本文转自 青苗飞扬 51CTO博客,原文链接:http://blog.51cto.com/qingmiao/1885998


相关文章
|
Java Shell 程序员
解决:bash: syntax error near unexpected token `(‘ ...【亲测有效】
解决:bash: syntax error near unexpected token `(‘ ...【亲测有效】
9157 0
|
8月前
|
IDE 开发工具 Python
python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
【5月更文挑战第14天】python中SyntaxError: unexpected EOF while parsing(语法错误:解析时遇到意外的文件结束)
375 6
|
5月前
|
JSON JavaScript 前端开发
Uncaught SyntaxError: Invalid or unexpected token
Uncaught SyntaxError: Invalid or unexpected token
66 0
|
7月前
|
Python
SyntaxError :invalid syntax错误解决办法
SyntaxError :invalid syntax错误解决办法
1818 1
|
8月前
|
JavaScript
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
|
自然语言处理 Python
Python 句法错误:"SyntaxError: invalid character in identifier",原因及解决方法
Python 句法错误:"SyntaxError: invalid character in identifier",原因及解决方法
6642 0
|
8月前
|
IDE 搜索推荐 开发工具
eslint: error Parsing error: Unexpected token <
eslint: error Parsing error: Unexpected token <
366 0
|
JSON 数据格式
解决报错信息之:SyntaxError: Unexpected token R in JSON at position 0
解决报错信息之:SyntaxError: Unexpected token R in JSON at position 0
416 0
|
Linux Shell Windows
Linix登录报"/etc/profile: line 11: syntax error near unexpected token `$'{\r''"
同事反馈他在一测试服务器(CentOS Linux release 7.2.1511)上修改了/etc/profile文件后,使用source命令不能生效,让我帮忙看看,结果使用SecureCRT一登录就发现下面错误信息: Last login: Fri Nov 4 00:42:45 2016 from 10.
2038 0

热门文章

最新文章