Ruby 中的 ruby 命令行选项

yufei       5 年, 8 月 前       1491

其实,前面的章节中我们已经有两个章节介绍了下 Ruby 命令行参数的用法和相关类、全局变量。但总感觉缺少了点什么没讲。想来想去,大概是前面的章节的内容都有点深奥了的缘故吧。然后我想简单的讲讲 Ruby 中的命令行选项

本章节所提到的命令行选项,是指运行 ruby 的选型,也就是 ruby --help 中列出的那些选项。并不是指要传递给 Ruby 程序的那些参数

废话不多说了,本章节我们将阐述以下几个知识点

  1. silence, mediumverbose 三个级别
  2. 在脚本中添加一个循环 ( loop )
  3. Ruby on Rails 和 RUBYOPT 环境变量

Disclaimer 放弃?

Ruby 提供了许多非常有趣的选项。

本文的目标不是详细介绍每个可用的选项,而是挑选和挖掘最有趣的选项。

由于 man ruby 并没有深入说明每个选项,本文将在它之上提供一系列示例来说明每个选项说明背后的概念。

silence, mediumverbose 三个级别

-W [level] 选项允许 Ruby 校准正在运行的程序的输出日志级别

该选项可用的值有

  1. -W0 ,也就是 silence

    p $VERBOSE
    puts 'printed'
    warn 'not printed'
    

    运行结果为

    nil
    printed
    

    此选项会将全局变量 $VERBOSE 的值设置为 nil

    此选项还将忽略所有 Ruby 内置警告和对 warn 方法的任何调用,也就是不会输出这些警告信息

  2. -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 方法输出的警告

  3. -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 日志级别下执行

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.