5

要使用 Ruby 显示警告,可以ruby使用 flag调用-w。使用库时,Ruby 可能会显示大量警告,因此很难从您实际处理的文件中找到警告。是否可以告诉ruby仅显示某些文件的警告?

这里有一个例子来说明这个问题。以下加载了一个生成大量警告的库,它还通过重新定义一个常量自行生成警告。

require 'grooveshark'

CONSTANT = 'foo'
CONSTANT = 'bar'

的输出ruby -w warning_test.rb如下:

/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/exceptions.rb:157:警告:已分配但未使用的变量 - 消息
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/exceptions.rb:167:警告:已分配但未使用的变量 - 消息
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/response.rb:11:警告:方法重新定义;丢弃旧身体
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/payload.rb:47:警告:“end”处的缩进不匹配,“case”处为 40
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63:警告:已分配但未使用的变量 - 状态
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63:警告:已分配但未使用的变量-stderr
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:56:警告:已分配但未使用的变量 - re
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:59:警告:已分配但未使用的变量 - null
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:126:警告:阴影外部局部变量 - cid
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:213:警告:遮蔽外部局部变量 - buf
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:215:警告:遮蔽外部局部变量 - buf
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:208:警告:已分配但未使用的变量 - 忽略
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:252:警告:隐藏外部局部变量 - 键
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:249:警告:已分配但未使用的变量 - 忽略
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:65:警告:方法重新定义;丢弃旧的播放列表
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:93:警告:方法重新定义;丢弃旧的最爱
warning_test.rb:4:警告:已初始化常量 CONSTANT

在这种情况下,我只想看到最后一个警告

warning_test.rb:4:警告:已初始化常量 CONSTANT

由于其他警告是由于库引起的,因此我无法直接控制它们的警告,因此它们并不那么有趣。我希望能够告诉 Ruby 只显示正在运行的项目的警告。

我意识到定义电流可能很棘手。也许只显示给定文件的警告和包含的文件require_relative就可以了。另一种选择是对在给定文件的目录结构中接近的文件显示警告。

4

1 回答 1

1

您可以将stderr 重定向到stdout,然后grep。这是一个例子:

ruby -w warning_test.rb 2>&1 | grep "warning_test"

于 2013-05-31T01:26:45.110 回答