Shell腳本:「syntax error:unexpected end of file」

這種錯誤只能說是坑,若是沒有見到過,極可能就要摔裏頭。解決問題是重要的,但弄明白問題的來源,每每更爲重要。linux

因此要先扯一下,換行和回車的歷史遺留問題。shell

在計算機出現以前,有個玩意叫電傳打字機。每秒鐘能夠打10個字符,可是在打完一行須要換行時,要用去0.2s。windows

這正好能夠打2個字符,這段時間裏若是有字符傳過來,那麼這些字符將被丟失。spa

很顯然,要解決這個問題,最簡單的辦法就是浪費這個0.2s。同時,咱們在寫東西時,要把手換到下一行及每行的首位置,也就是說這是兩個動做。操作系統

天然而然地,研發人員在每一行後面添加了兩個表示結束的字符(回車+換行)。unix

所謂「回車」:讓打字機的打印頭從新回到一行的首位置(左邊界);所謂「換行」:讓打字機把紙向下移一行。blog

後來,計算機來了,操做系統也來了。因而,坑也來了。不一樣的操做系統對這個機器的「復位+走紙」的表示是不一樣的:ci

OStable

表示im

C語言/轉義字符

HEX表示

Windows

回車+換行(CR/LF)

\r\n

0x0d0a

Unix/Linux

換行(LF)

\n

0x0a

Mac OS

回車(CR)

\r

0x0d

因而,unix/mac下的文件若是在windows裏打開,全部文字會變成一行;而windows的文件在unix/mac下打開,每行的結尾會多出一個 ^M 符號

 我想在linux下執行一個shell腳本,而它恰巧又在windows中打開過,因而我就狠狠地摔在了這個坑裏。解決的辦法天然很簡單,一個dos2unix命令便可。

相關文章
相關標籤/搜索