4

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

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

4

2 回答 2

5

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

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

试试这个

localhost:sites mike$ chmod +x err.rb
于 2012-10-28T08:22:08.733 回答
0

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

chmod +x err.rb

然后你可以从一个shell调用它

./err.rb

或从 IRB 作为

`./err.rb`

您也可以ruby对其执行:

`ruby err.rb`

对于不同的反引号、系统和 exec 方法,这里也是一个很好的资源。

于 2012-10-28T08:25:11.310 回答