2009-08-20 9 views
5

Mentre la versione 1.8.7 sembra avere una versione backported di Shellwords::shellescape, so che il metodo è una funzionalità 1.9 e sicuramente non è supportato nelle versioni precedenti di 1.8. Qualcuno sa dove posso trovare, sia in forma di Gemma o semplicemente come uno snippet, una solida implementazione standalone del comando di escape Bourne-shell per Ruby?Implementazione di shellwords.shellescape per Ruby 1.8

risposta

5

finii per andare con il Escape gemma, che ha l'ulteriore funzionalità di utilizzare le virgolette per impostazione predefinita e solo escape backslash quando necessario.

9

Si potrebbe anche solo copiare quello che si desidera da shellwords.rb nel bagagliaio della repository subversion di Ruby (che è 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

Grazie! Ho finito con la gemma di fuga (vedi la mia risposta); ma questa è sicuramente un'opzione praticabile. BTW, Ruby ha una doppia licenza in base al file che hai collegato. – Avdi

+0

Per quanto riguarda le licenze, uno snippet di questo tipo è equo (http://en.wikipedia.org/wiki/Fair_use) comunque. Come afferma la FSF (http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant): "solo poche righe (meno di 15 o così) non sono legalmente significative per il copyright." –

Problemi correlati