2009-08-20 13 views
5

Podczas kompilacji wersji 1.8.7 wydaje mi się, że mam przeniesioną wersję Shellwords::shellescape, wiem, że ta metoda jest funkcją 1.9 i zdecydowanie nie jest obsługiwana we wcześniejszych wersjach wersji 1.8. Czy ktokolwiek wie, gdzie mogę znaleźć, albo w postaci Gem, albo po prostu jako fragment, solidną, samodzielną implementację polecenia Bourne-shell uciekającego dla Ruby?Implementacja Shellwords.shellescape dla Ruby 1.8

Odpowiedz

5

I skończyłem dzieje z Escape gem, który ma dodatkowy funkcja domyślnego używania cudzysłowów, aw razie potrzeby tylko odwrotny ukośnik.

9

Równie dobrze można po prostu skopiować to, co chcesz z shellwords.rb w bagażniku Subversion repozytorium Ruby (co jest 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

Dzięki! Skończyłem z klejnotem Escape (zobacz moją odpowiedź); ale jest to z pewnością realna opcja. BTW, Ruby jest podwójnie licencjonowana zgodnie z plikiem, który łączyłeś. – Avdi

+0

W związku z licencjonowaniem, tak czy inaczej, ten fragment jest dozwolony (http://en.wikipedia.org/wiki/Fair_use). Jak podaje FSF (http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant): "tylko kilka linii (mniej niż 15) nie ma prawnego znaczenia dla praw autorskich". –