-1

file命令说文件类型,但如果文件是文本,它会说“ASCII文本”。但是我想知道它是什么类型的文本,例如 Ruby 脚本、Python 脚本、C++ 文件等。我想用 Ruby 来做这件事。

4

2 回答 2

2

你不能可靠地做到这一点。

但是,您可以通过查看第一行 (hashbang)中的解释器名称来相当确定。(例如#!/usr/bin/python,#!/usr/bin/env ruby等)

然而,一般来说,不可能做到可靠。例如,考虑以下程序:

print "Hello, World!"

是 Python 吗?还是红宝石?还是 Perl?-- 它是所有这些语言的有效程序!

于 2013-02-20T00:24:01.483 回答
1

你不能可靠地做到这一点,但你能得到的最接近的可能是查看程序在给定语言的语法上是否正确。请注意,这会产生误报!@maerics 的示例就是print "Hello, World!"其中之一,简单的空文件情况也是如此(可能所有语法检查器都可以通过)。您可以通过仅猜测是否只有一个语法检查器说没问题来减少这种情况。

以下是仅检查您提供的语言的语法的方法(更多信息,Syntastic Vim 插件是一个很好的参考):

  • C++:($CC -x c++ -fsyntax-only myfile替换$CC为您喜欢的编译器,此命令兼容 Clang 和 GCC。)

  • 红宝石:ruby -c myfile

  • Python:python -m py_compile myfile

通常,您可以只检查此命令的退出代码,在 Ruby 中,您可以通过传递要运行的命令system并检查返回值是否为真来做到这一点。

于 2013-02-20T01:32:17.460 回答