2009-08-20 12 views
5

Mientras que la compilación de 1.8.7 que tengo parece tener una versión backported de Shellwords::shellescape, sé que el método es una característica 1.9 y definitivamente no es compatible con las versiones anteriores de 1.8. ¿Alguien sabe dónde puedo encontrar, ya sea en forma de gema o simplemente como un fragmento, una implementación independiente robusta del comando Bourne-shell escapándose para Ruby?Shellwords.shellescape implementación para Ruby 1.8

Respuesta

5

terminé yendo con la Escape joya, que tiene el adicional característica del uso de comillas por defecto, y solo barra invertida, escapando cuando sea necesario.

9

Es lo mismo que acaba de copiar lo que quiere de shellwords.rb en el maletero del depósito de la subversión de Ruby (que es 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

Gracias! Terminé yendo con la gema Escape (ver mi respuesta); pero esta es definitivamente una opción viable. Por cierto, Ruby tiene doble licencia según el archivo que vinculó. – Avdi

+0

Con respecto a la licencia, un fragmento de este pequeño es de uso legítimo (http://en.wikipedia.org/wiki/Fair_use) de todos modos. Como afirma el FSF (http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant): "solo unas pocas líneas (menos de 15 o más) no son legalmente significativas para los derechos de autor". –

Cuestiones relacionadas