如何揭示两个明显相同的文本文件之间隐藏的差异?

时间:2014-07-16 10:16:17

标签: macos shell vim encoding

我有两个明显相同的文本文件, 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 file1file -I file2都提供了

    file1: text/plain; charset=us-ascii
    file2: text/plain; charset=us-ascii
    

我想了解到底发生了什么。 我的猜测是针对一些隐藏的编码问题,但我不知道在哪里以及如何查找它。建议?

1 个答案:

答案 0 :(得分:2)

两个文件的行结尾是不同的。一个是Windows行结束(CR + LF),另一个是普通的Mac OSX / Unix行结束(只有LF)。

当您在Vim中打开文件时,您会在底部的状态栏中看到[dos]

要解决此问题,请执行命令

:set fileformat=unix

请注意,旧的Mac OS 9使用CR作为行结尾。