其实,前面的章节中我们已经有两个章节介绍了下 Ruby 命令行参数的用法和相关类、全局变量。但总感觉缺少了点什么没讲。想来想去,大概是前面的章节的内容都有点深奥了的缘故吧。然后我想简单的讲讲 Ruby 中的命令行选项
本章节所提到的命令行选项,是指运行 ruby
的选型,也就是 ruby --help
中列出的那些选项。并不是指要传递给 Ruby 程序的那些参数
废话不多说了,本章节我们将阐述以下几个知识点
silence
,medium
和verbose
三个级别- 在脚本中添加一个循环 ( loop )
- Ruby on Rails 和
RUBYOPT
环境变量
Disclaimer 放弃?
Ruby 提供了许多非常有趣的选项。
本文的目标不是详细介绍每个可用的选项,而是挑选和挖掘最有趣的选项。
由于 man ruby
并没有深入说明每个选项,本文将在它之上提供一系列示例来说明每个选项说明背后的概念。
silence
, medium
和 verbose
三个级别
-W [level]
选项允许 Ruby 校准正在运行的程序的输出日志级别
该选项可用的值有
-
-W0
,也就是silence
p $VERBOSE puts 'printed' warn 'not printed'
运行结果为
nil printed
此选项会将全局变量
$VERBOSE
的值设置为nil
。此选项还将忽略所有 Ruby 内置警告和对 warn 方法的任何调用,也就是不会输出这些警告信息
-
-W1
,也就是medium
级别p $VERBOSE warn 'printed' { my_key: 'value', my_key: 'another_value' }
输出结果为
false printed warning: key :my_key is duplicated and overwritten on line 3
该选项会将全局变量
$VERBOSE
的值设置为false
在此级别下,将会输出 「 解释器级别 1 」 ( interpreter level 1 ) 的警告 - 例如,「 重复哈希键 」 ( duplicated hash keys ) 警告 - 同时还会输出
warn
方法输出的警告 -
-W2
,也就是verbose
级别p $VERBOSE warn 'printed' def test end def test end
运行结果为
true printed warning: method redefined; discarding old my_method
该级别下会将全局变量
$VERBOSE
的值设置为true
在此级别下,将会输出 「 解释器级别 2 」 ( interpreter level 2 ) 的警告 - 例如,「 方法重新定义 」 ( method redefinition ) 警告 - 同时还会输出
warn
方法输出的警告
在脚本中添加一个循环 ( loop )
-n
选项会让 Ruby 假定脚本中有以下循环语句的存在
while gets ... end
在这个循环中,可以使用 $_
魔法变量获取每一行的内容。
因此,假设存在以下内容的脚本文件 consumer.rb
puts "line: #{$_}"
和另一个文本文件 input.txt
I love Ruby More than C#
则运行的结果如下
$> ruby -n consumer.rb input.txt line: I love Ruby line: More than C#
通过使用 -n
选项,consumer.rb
脚本文件的最终版本是
while gets puts "line: #{$_}" end
Ruby on Rails 和 RUBYOPT
环境变量
Ruby on Rails 可能是世界上使用最多的 Ruby 项目。
当我们在命令行中输入 rails console
命令并按下会车后,会在内部运行命令 ruby bin/rails console
因此,可以使用 RUBYOPT
环境变量与 Ruby 选项进行交互
$> RUBYOPT="-W0" bin/rails console
这样,Rails 命令就会在 silence
日志级别下执行