2013-02-23 99 views
5

要用紅寶石顯示警告,可以撥打ruby,並將其標記爲-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: warning: assigned but unused variable - message 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/exceptions.rb:167: warning: assigned but unused variable - message 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/response.rb:11: warning: method redefined; discarding old body 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/payload.rb:47: warning: mismatched indentations at 'end' with 'case' at 40 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63: warning: assigned but unused variable - status 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63: warning: assigned but unused variable - stderr 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:56: warning: assigned but unused variable - re 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:59: warning: assigned but unused variable - null 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:126: warning: shadowing outer local variable - cid 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:213: warning: shadowing outer local variable - buf 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:215: warning: shadowing outer local variable - buf 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:208: warning: assigned but unused variable - ignored 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:252: warning: shadowing outer local variable - key 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:249: warning: assigned but unused variable - ignored 
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:65: warning: method redefined; discarding old playlists 
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:93: warning: method redefined; discarding old favorites 
warning_test.rb:4: warning: already initialized constant CONSTANT 

在這種情況下,我只想看到的僅僅是最後的警告

 
warning_test.rb:4: warning: already initialized constant CONSTANT 

由於其它的警告是由於庫我沒有直接控制警告,因爲它們並不那麼有趣。我希望能夠告訴Ruby只顯示正在工作的項目的警告。

我意識到定義當前可能會非常棘手。也許只顯示給定文件的警告,並通過require_relative包含的文件可以。另一種方法是對給定文件的目錄結構中接近的文件顯示警告。

+0

你說什麼樣的警告? – 2013-02-23 15:28:27

+0

@AndrewMarshall:例外,也許? – 2013-02-23 15:34:27

+0

@AndrewMarshall我指的是當你用'ruby'使用'-w'時得到的那些。 – 2013-02-23 15:43:17

回答

1

您可以將stderr重定向到stdout,然後grep。這裏有一個例子:

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

+0

另一種選擇是使用'grep -v gems'來清理庫。 – 2014-08-17 22:56:04