2012-11-05 55 views
0

命令在我的可執行的ruby文件我有以下幾點:運行命令行從托爾可執行

#!/usr/bin/env ruby 

require 'thor' 

include Thor::Actions 

class UI < Thor 
    # def self.source_root 
    # File.dirname(__FILE__) 
    # end 

    desc "makecal", "Generates postscript calendar to your desktop" 
    def makecal 
    # puts `ls ~` 
    puts run('ls ~') 
    # puts run "pcalmakecal -B -b all -d Helvetica/8 -t Helvetica/16 -S #{Time.now.month} #{Time.now.year} > ~/Desktop/#{Time.now.month}-#{Time.now.year}" 
    end 
end 

UI.start 

在終端,當我運行該文件是我得到的托爾的運行命令返回NilClass一個空行。

但是,當我取消對`ls〜`puts的註釋並註釋掉Thor的運行方法時,我得到了預期的主目錄輸出。

我很難弄清楚爲什麼我不能像Thor的運行方法一樣工作,就像Ruby的蜱蟲一樣。

任何想法,我可能出錯了?爲尋找

回答

0

我沒有把

感謝包括我的類中聲明,並且把事情搞亂。代碼應該是:

#!/usr/bin/env ruby 

require 'makecal' 


class UI < Thor 
    include Thor::Actions 
    # def self.source_root 
    # File.dirname(__FILE__) 
    # end 
    # 

    desc "makecal", "Generates postscript calendar to your desktop" 
    def makecal 
    # puts `ls ~` 
    puts run('ls ~') 
    # puts run "pcal -B -b all -d Helvetica/8 -t Helvetica/16 -S #{Time.now.month} #{Time.now.year} > ~/Desktop/#{Time.now.month}-#{Time.now.year}" 
    end 
end 

UI.start 
+0

你能編輯你的初始文章,這是代碼清單嗎? – davetron5000

+0

赫,可悲的是,這是我的問題 - 有點反氣候。當我正確包含Thor :: Actions時,run()的行爲就像我期望的那樣。 – jklina

1

Thor關於此方法的文檔實際上是錯誤的和不完整的。它證明它返回了「命令的內容」(我假定它指的是標準輸出),但是它通過被忽略而不做任何事情。

,就可以了,很顯然,使用:capture選項來獲得你想要的東西:

unless options[:pretend] 
    config[:capture] ? `#{command}` : system("#{command}") 
end 

因此,嘗試做

puts run("ls ~", :capture => true) 

,看看有沒有做它。

+0

我也注意到了這一點,但儘管如此,無論我設置捕獲標誌爲什麼它仍然返回標準輸出。當我將capture設置爲false時,它會在Thor輸出之後和標準輸出之後運行的每個命令之後打印額外的'true'。當我將它設置爲true時,它不打印額外的'真'。它幾乎像它總是使用蜱而不是系統()。 – jklina