【问题标题】:Ruby: Kernel#` Permission denied to run commandRuby:内核#`权限被拒绝运行命令
【发布时间】:2012-10-28 08:19:39
【问题描述】:

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

有人可以解释为什么我在尝试使用反引号运行它时遇到权限错误,以及使用反引号运行它的总体目的是什么。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    尝试添加执行权限,使用“chmod +x that_file_name” 使用格式“./file”执行“文件”需要有执行权限

    当您使用 ruby​​ 时它会运行,因为 ruby​​ 具有执行权限并且它只是读取该文件。

    试试这个

    localhost:sites mike$ chmod +x err.rb
    

    【讨论】:

      【解决方案2】:

      您需要使文件可执行,您可以在 shell 中执行此操作:

      chmod +x err.rb
      

      然后你可以从 shell 调用它

      ./err.rb
      

      或来自 IRB

      `./err.rb`
      

      你也可以在上面执行ruby

      `ruby err.rb`
      

      这里还有一个 good resource 用于不同的反引号、系统和 exec 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 2021-11-02
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 2016-09-26
        • 2021-01-26
        相关资源
        最近更新 更多