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命令便可。

相关文章
相关标签/搜索