为什么"file"命令在.py文件上混淆了?

pyt*_*hor 4 python

我有几个我写过的python模块.随便,我file在这个目录上使用过,我对所看到的内容感到非常惊讶.这是它认为文件的结果计数:

  1 ASCII Java program text, with very long lines
  1 a /bin/env python script text executable
  1 a python script text executable
  2 ASCII C++ program text
  4 ASCII English text
 18 ASCII Java program text
Run Code Online (Sandbox Code Playgroud)

真奇怪!知道发生了什么或为什么它似乎认为python模块经常是java文件?

我正在使用CentOS 5.2.

编辑问题更倾向于我的好奇心,为什么显然非java和非c ++程序文件被归类为这样.当然,我不希望file是完美的,但对正在做出的选择感到惊讶.我猜想它会放弃并说出文本文件,而不是做出非常不正确的推论.

Pau*_*ce. 6

我刚刚进行了一次测试,并且在每次识别错误的情况下都没有shebang线.

对于每个文件:

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

file 正确识别它.

查看该magic文件,另一个触发识别为Python文件的东西是第一行的三重引号.

$ echo '"""' | file -
/dev/stdin: python script text executable
$ echo '#!/usr/bin/python' | file -
/dev/stdin: python script text executable
$ echo '#!/usr/bin/env python' | file -
/dev/stdin: a python script text executable
Run Code Online (Sandbox Code Playgroud)


小智 5

文件手册页

文件测试每个参数以尝试对其进行分类.按顺序执行三组测试:文件系统测试,幻数测试和语言测试.成功的第一个测试会导致打印文件类型.

我的猜测是你的一些文件碰巧匹配不同语言的测试并错误地识别文件.

此外,文件通常用于二进制文件,如错误部分所示.

file使用了几种有利于速度而非准确性的算法,因此可能会误导文本文件的内容.

对文本文件(主要用于编程语言)的支持过于简单,效率低下,需要重新编译才能更新.