Ruby:内核#`权限被拒绝运行命令

时间:2012-10-28 08:19:40

标签: ruby

在尝试了解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

有人可以解释为什么我试图用反引号运行它时会出现权限错误,而且通常用反引号运行它的目的是什么。

2 个答案:

答案 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