如何检查以 script/runner 为 shebang 的 Ruby 脚本的语法?

20

我有问题需要检查带有rails script/runner的shebang的ruby脚本的语法。

这里有两个示例脚本以及它们对于ruby语法检查的响应:

脚本hello_world_runner.rb

#!/usr/bin/env script/runner
p "Hello world!"

脚本 hello_world.rb

#!/usr/bin/env ruby
p "Hello world!"

以下是我检查语法的方式。第一行是一个命令,第二行是输出结果。

$ ruby -c hello_world_runner.rb 
"Hello world!"

$ ruby -c hello_world.rb 
SYNTAX OK
5个回答

14

你可以尝试这个

tail -n +2 hellow_world_runner.rb | ruby -c

不是最理想的解决方法,但应该可行。


7
你可以像这样重新编写你的脚本:
Rails 2:
#!/usr/bin/env ruby
require File.expand_path(Dir.pwd + '/config/boot',  __FILE__)
require RAILS_ROOT + '/config/environment'
p "Hello world!"

Rails 3:

#!/usr/bin/env ruby
require File.expand_path(Dir.pwd + '/config/boot',  __FILE__)
require File.expand_path(Dir.pwd + '/config/application',  __FILE__)
Rails.application.require_environment!
p "Hello world!"

当然,你需要定义自己的(绝对)路径或从Rails根目录运行此脚本。
$ ruby -c ./test.rb 
Syntax OK

7

ruby命令行有两个标志可能会帮助你,我使用:

ruby -wc test.rb

3

我强烈建议您将这些脚本中的大部分代码因素化到您的核心域模型/库目录等中。这将使您能够像测试应用程序的其余部分一样测试脚本逻辑(也将检查语法),并将可执行文件的实际内容减少到一行或两行。


2

这里有一个小技巧:

$ ruby -wc <(cat <(echo ruby) hello_world_runner.rb)
Syntax OK

基本上,ruby语法检查器期望在第一行(shebang)中包含ruby单词。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接