2009-08-20 53 views
5

雖然1.8.7版本的內部版本似乎有Shellwords::shellescape的後端版本,但我知道該方法是1.9版本的功能,並且在早期版本的1.8中肯定不支持。有沒有人知道我在哪裏可以找到,無論是在寶石形式或只是作爲一個片段,強大的獨立實施的Bourne shell命令轉義爲Ruby?Ruby 1.8的Shellwords.shellescape實現

回答

5

我傷口與Escape寶石去,其中有額外的默認情況下使用引號的功能,必要時僅反斜線轉義。

9

您可能也只是複製你從shellwords.rb想要在Ruby的版本庫中的主幹(這是GPLv2「d):

def shellescape(str) 
    # An empty argument will be skipped, so return empty quotes. 
    return "''" if str.empty? 

    str = str.dup 

    # Process as a single byte sequence because not all shell 
    # implementations are multibyte aware. 
    str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1") 

    # A LF cannot be escaped with a backslash because a backslash + LF 
    # combo is regarded as line continuation and simply ignored. 
    str.gsub!(/\n/, "'\n'") 

    return str 
    end 
+0

謝謝!我用逃逸寶石結束了(見我的回答);但這絕對是一個可行的選擇。順便說一句,根據您鏈接的文件,Ruby是雙重許可的。 – Avdi

+0

關於授權,無論如何這只是一個合理使用(http://en.wikipedia.org/wiki/Fair_use)。正如FSF聲明(http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant):「只有幾行(少於15個)對版權沒有法律意義。」 –