2012-10-28 53 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