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
5
A
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
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
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." –