如何更准确地检测一个文件是linux中的ruby脚本文件

时间:2017-04-07 15:26:34

标签: ruby linux file-type

我知道extname是rb

我知道linux file命令在某些情况下有效。

但是所有不够准确无法决定文件的是ruby脚本

编辑:

我想要做的是:我写的红宝石线更适合 使用bash shell脚本如下:

find -name '*.rb' |xargs -n100 cat |grep -v '\s*#' |wc -l

但实际上,我写了一些可执行的ruby脚本,还有其他的,例如 .rakeGemfile Capfile jbuider等...

由于

2 个答案:

答案 0 :(得分:2)

使用ruby -c。从手册页:

-c    Causes Ruby to check the syntax of the script and exit

这将告诉您文件是否是有效的Ruby脚本而不执行它。如果是,它将打印"语法OK"到STDOUT并以状态码0退出;否则它会向STDERR输出语法错误并以非零代码退出。 (当然,您可以使用I / O重定向来抑制消息,例如&>/dev/null。)

当然,误报是可能的(事实上文件有效 Ruby并不一定意味着它本来是一个Ruby脚本),但除了非常短的文件外不太可能

答案 1 :(得分:0)

你想要的是不可能的。例如,以下是至少Ruby,PHP,Scala和Perl中有效且语义相同的程序:

print("Hello");

它在Python中也有效,虽然在语义上略有不同:它打印换行符(即打印字符串"Hello\n")而其他人不打印(其他人打印"Hello"没有换行符)

它在ECMAScript中至少在语法上有效,并且在语法上可以等效,假设标准库中存在合适的print函数。

它可能在很多语言中有效,我能想到的有AmbientTalk,Atomy,CoffeeScript,Converge,Dart,Dylan,E,Elixir,Falcon,Fancy,Groovy,Hack,Io,Ioke, Julia,Lua,Monte,Neko,Pico,Pike和Seph。它也是一个有效的片段,虽然不是一个完整的程序,至少在Perl6,C,C ++,Objective-C,Objective-C ++,D,Java,C♯,Spec♯,Sing♯,M♯,Cω,X♯ ,Kotlin,锡兰,铁锈和铁锈。

除了询问编写它的人之外,无法知道这是否是Ruby程序。