当我从终端运行时:
$ grep -rnw 'PageObjects::CompanySettings::InfoPage' spec/**/*_spec.rb | cut -d: -f1 | uniq
它返回一个结果:
spec/features/admins/change_payment_method_spec.rb
当我运行此命令时(通知 InfoPage 现在 TeamPage :
$ grep -rnw 'PageObjects::CompanySettings::TeamPage' spec/**/*_spec.rb | cut -d: -f1 | uniq
我得到一个结果:
spec/features/team_page_spec.rb
现在,当我进入irb
并使用反引号来调用shell命令时,我得到第二个命令(TeamPage)的输出,但第一个命令(InfoPage)没有输出。
2.1.6 :001 > `grep -rnw 'PageObjects::CompanySettings::InfoPage' spec/**/*_spec.rb | cut -d: -f1 | uniq`
""
2.1.6 :002 > # No result ^^
2.1.6 :003 > `grep -rnw 'PageObjects::CompanySettings::TeamPage' spec/**/*_spec.rb | cut -d: -f1 | uniq`
"spec/features/team_page_spec.rb\n"
2.1.6 :004 > # One result, as expected!
任何人都可以帮我弄清楚这是为什么吗?
答案 0 :(得分:1)
我注意到在您的第一个示例中,该文件嵌套了几个深度目录,并且您使用的是非标准**
通配符。
我最好的猜测是你的交互式shell支持非标准通配符,但你的批处理shell不支持。
一种可能的解决方案是使用find
而不是依赖shell通配符。另一种可能是使用Ruby,因为你已经在使用Ruby了。 (注意:grep
是非常优化的,所以如果你有大量非常大的文件,Ruby可能会慢一些。)
# Ruby's Dir class does support **
Dir['spec/**/*_spec.rb'].select {|filename|
File.open(filename) {|file|
file.each_line.any? {|line|
line.inlcude?('PageObjects::CompanySettings::InfoPage')
}
}
}
[UNTESTED]