最近在 Linux 跑 shell 脚本时踩了一个坑,在脚本没问题的情况且赋权的情况下,报"No such file or directory…"的错误。
原因是在 Window环境下,文本文件(包括纯文本内容的脚本文件),默认的 Line Endings(行尾格式)是 “Windows” 格式,在 Linux 环境跑脚本时应使用 “Unix” 格式。
下面是这两种 Line Endings 格式的区别:
Line Endings 格式 | 区别 |
---|---|
Windows (CRLF) | 行尾是 ‘r\n’,即回车+换行 |
Unix (LF) | 行尾是 ‘\n’,即换行 |
如果在 Linux 环境使用 Line Endings 为"Windows"格式,可能会因为多出来的 ‘\r’ (与“Unix”格式相比)导致报错(虽然不一定会报错)。
所以,在 Linux 跑脚本的时候,要注意一下脚本文件的 Line Endings,务必将文件的 Line Endings 改为 “Unix” 格式。
NotePad++可以再右下角直接更改(有些版本需要在编辑选项卡里改);
Sublime Text在View→Line Endings里更改。
此外,在 Linux 运行 HQL 文件时(hive -f hive.sql),报错:ParseException line 1:0 character ‘’ not supported here
因为被hive认可编译的是 UTF-8 无BOM格式编码