shell 指令碼報錯^M: syntax error near unexpected token
以前寫shell指令碼執行的好好的,今天再執行突然出現了錯誤:
syntax error near unexpected token `
網上搜了下正好有人遇到過這個問題,並且給出瞭解決方式,於是乎就轉過來了:
用命令vi -b 開啟你的SHELL指令碼檔案,你會。發現每行指令碼最後多了個^M。
那麼接下來就要搞清楚這個^M是什麼東東?
long long ago….. 老式的電傳打字機使用兩個字元來另起新行。一個字元把滑動架移回首位 (稱為回車,<CR>
,ASCII碼為0D),另一個字元把紙上移一行 (稱為換行, <LF>
,ASCII碼為0A)。當計算機問世以後,儲存器曾經非常昂貴。有些人就認定沒必要用兩個字元來表示行尾。UNIX 開發者決定他們可以用一個字元來表示行尾,Linux沿襲Unix,也是<LF>
。Apple 開發者規定了用<CR>
。開發 MS-DOS以及Windows 的那些傢伙則決定沿用老式的。
因為MS-DOS及Windows是回車+換行來表示換行,因此在Linux下用Vim檢視在Windows下用VC寫的程式碼,行尾後的“^M”符號,表示的是符。
在Vim中解決這個問題,很簡單,在Vim中利用替換功能就可以將“^M”都幹掉,鍵入如下替換命令列:
1)vi -b setup.sh
2)在命令編輯行<就是: 按ESC鍵 然後shift+:冒號>輸入:
%s/^M//g
注意:上述命令列中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”鍵生成的。
這樣替換掉以後,儲存就可以執行了。當然還有其他的替換方式比如:
a. 一些 linux 版本有 dos2unix 程式,可以用來祛除^M。(同樣的也有 unix2dos )
b.
cat filename1 | tr -d "/r" > newfile
去掉^M生成一個新檔案,還有sed命令等,凡是可以替換的命令都是可以用來新生成一個檔案的。
按照上面所說的,刪除”^M” shell指令碼就執行正常,後來問同事,原來他windows記事本中修改了程式路徑,導致每一行多出了^M。
相關文章
- syntax error near unexpected token `Error
- syntax error near unexpected token `問題的解決Error
- CentOS7使用exp/imp時報錯:bash: syntax error near unexpected token `(CentOSError
- Linux 5中出現的-bash: syntax error near unexpected token `('錯誤LinuxError
- Solaris syntax error: unexpected end of fileError
- eclipse 引入外部js檔案報Syntax error on token 錯解決方案EclipseJSError
- npm 安裝 uirecorder 報錯 Unexpected tokenNPMUI
- Oracle安裝報錯syntax errorOracleError
- line 10:syntax error: unexpected end of fileError
- shell指令碼報錯:[: missing `]‘指令碼
- 配置NDK syntax error: unexpected end of file 解決Error
- 解決 eslint 的 Parsing error: Unexpected token 錯誤EsLintError
- 執行shell指令碼報錯:-bash: ./test1.sh: /bin/bash^M: ...指令碼
- 【shell 】syntax error in conditional expressionErrorExpress
- shell指令碼報錯:"[: =: unary operator expected"指令碼
- MySQL 報錯MySQL server syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'MySqlServerMIT
- Solaris awk: syntax error near line 1 awk: bailing out near line 1ErrorAI
- npm ERR! Unexpected token in JSON at position 0 while parsing near ’ npm ERR! <!–////////NPMJSONWhile
- JN專案-Hibernate報錯unexpected token: select
- Laravel 8使用 佇列任務出現 「 syntax error, unexpected ')' 」錯誤解決Laravel佇列Error
- 360 Atals:Cause: java.sql.SQLException: Proxy Warning - near “status“: syntax errorJavaSQLExceptionError
- 【Shell】fix 1032報錯資訊的指令碼指令碼
- Shell指令碼報錯:-bash: ./switch.sh: /bin/bash^M: bad interpreter: No such file or directory指令碼
- jquery Ajax 請求錯誤 Unexpected tokenjQuery
- PbootCMS 升級後網站打不開,解析錯誤 Parse error: syntax error, unexpected ‘:’, expecting ‘{’怎麼辦boot網站Error
- jq jsonp跨域報錯之“Unexpected token :”的解決方案JSON跨域
- 解決vue-cli element-ui打包報錯Unexpected token: operator (>)VueUI
- webpack打包vue檔案時報錯`Unexpected token:`WebVue
- shell指令碼中如何報錯即刻退出以及如何獲取子shell指令碼的錯誤資訊:set -o errexit指令碼
- pecl PHP Parse error: syntax error, unexpected 'new' (T_NEW) 以及 XML缺失解決辦法PHPErrorXML
- 10g GC 啟動oms報錯Unexpected error occurred. Check error and log files.GCError
- 執行遷移檔案報錯: Syntax error or access violation: 1166 ...Error
- Uncaught SyntaxError: Unexpected token <反思Error
- shell 指令碼的除錯問題指令碼除錯
- ubuntu下pig報錯ERROR 2999: Unexpected internal error. Failed to create DataStorage的解決UbuntuErrorAIAST
- jwt生成token報錯JWT
- mysql執行sql指令碼報錯ERROR 1366 (HY000) 解決MySql指令碼Error
- 如何解決"Parse error: syntax error"Error