2012-10-28 51 views
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" 

他试图运行它与籽粒#`(反引号)

>> `./err.rb` 

     err 
=> "out\n" 

点这第一种方式说明的是,当与反引号

STDERR is output, but not captured 
STDOUT is captured 

当我试图复制这个我的系统上运行,我得到了一个权限错误

localhost:sites mike$ `./err.rb` 
-bash: ./err.rb: Permission denied 

我尝试须藤./err.rb没有变化。

我可以运行ruby err.rb,但产生的结果与作者得到的结果不同。即通过运行红宝石err.rb我得到

out 
    error 

有人能解释为什么我收到一个权限错误试图与反引号运行它,并且通常用什么反引号运行它的全部目的就是。

回答

5

尝试添加权限执行,使用“使用chmod + X that_file_name” 使用格式“./file”中的‘文件’需要具有执行权限

它时,你红宝石运行,因为红宝石具有执行权限执行它只是读取该文件。

试试这个

localhost:sites mike$ chmod +x err.rb 
0

你需要让文件的可执行文件,你可以从你的壳呢:

chmod +x err.rb 

然后你就可以从一个shell称其为

./err.rb 

或来自IRB,如

`./err.rb` 

你也可以在上面执行ruby

`ruby err.rb` 

下面是不同的反引号,系统和太EXEC方法good resource