在尝试了解Ruby执行方法时,我发现这篇博客文章介绍了在Ruby中运行命令的五种方法http://mentalized.net/journal/2010/03/08/5_ways_to_run_commands_from_ruby/
作者创建了一个文件err.rb,它输出两行,一行在STDOUT上,另一行在STDERR上
#!/usr/bin/env ruby
puts "out"
STDERR.puts "error"
他尝试运行它的第一种方法是使用Kernal #`(反引号)
>> `./err.rb`
err
=> "out\n"
这说明了使用反引号运行
STDERR is output, but not captured STDOUT is captured
当我尝试在我的系统上复制它时,我收到了权限错误
localhost:sites mike$ `./err.rb`
-bash: ./err.rb: Permission denied
我尝试了sudo ./err.rb
而没有任何变化。
我可以运行ruby err.rb
,但这会产生与作者不同的结果。即通过运行ruby err.rb我得到
out
error
有人可以解释为什么我试图用反引号运行它时会出现权限错误,而且通常用反引号运行它的目的是什么。
答案 0 :(得分:5)
尝试添加权限执行,使用“chmod + x that_file_name” 要使用“./file”格式执行,“文件”需要具有执行权限
它在ruby时运行,因为ruby具有执行权限,它只是读取该文件。
试试这个
localhost:sites mike$ chmod +x err.rb
答案 1 :(得分:0)
您需要使文件可执行,您可以从shell执行此操作:
chmod +x err.rb
然后你可以从shell中调用它
./err.rb
或来自IRB
`./err.rb`
您也可以在其上执行ruby
:
`ruby err.rb`
对于不同的反引号,系统和exec方法,这里也是good resource。