我有两个明显相同的文本文件, file1 和 file2 ,它们包含一个非常简单的shell脚本。
我的意思是"显然是相同的"如果我在vim(或TextEdit)上编辑这样的文件,内容显示完全相同:
cd ../
mkdir test
cd test
touch aaa
(我确保周围没有空格/标签)。
了解这一点可能是相关的 file2 是在另一台(Windows)计算机上创建的(我正在使用OS X 10.9),并且是从共享服务器上创建的,而 file1 是的副本file2 手工创建。
现在, file1 按预期运行(sh ./file1
),而尝试运行 file2 会产生错误:
: No such file or directory
: command not found
mkdir: test\r: File exists
: command not found
: command not found
我观察到了:
$ ls -lh file*
的输出显示略有不同的大小:
-rw-r--r-- 1 me staff 39B 16 Jul 10:30 file1
-rw-r--r-- 1 me staff 46B 16 Jul 10:31 file2
$ diff file1 file2
给出了一些令人费解的(至少对我来说)输出:
1,7c1,7
< cd ../
<
< mkdir test
<
< cd test
<
< touch aaa
---
> cd ../
>
> mkdir test
>
> cd test
>
> touch aaa
最后,file -I file1
和file -I file2
都提供了
file1: text/plain; charset=us-ascii
file2: text/plain; charset=us-ascii
我想了解到底发生了什么。 我的猜测是针对一些隐藏的编码问题,但我不知道在哪里以及如何查找它。建议?
答案 0 :(得分:2)
两个文件的行结尾是不同的。一个是Windows行结束(CR + LF),另一个是普通的Mac OSX / Unix行结束(只有LF)。
当您在Vim中打开文件时,您会在底部的状态栏中看到[dos]
。
要解决此问题,请执行命令
:set fileformat=unix
请注意,旧的Mac OS 9使用CR作为行结尾。