la mise en œuvre Shellwords.shellescape pour Ruby 1.8
Question
Alors que la construction de 1.8.7 je semble avoir une version rétroportés de Shellwords::shellescape
, je sais que la méthode est une caractéristique 1.9 et est certainement pas pris en charge dans les versions antérieures de 1,8. Est-ce que quelqu'un sait où je peux trouver, que ce soit sous forme Gem ou tout simplement comme un extrait, une implémentation autonome robuste de commande Bourne-shell pour échapper Ruby?
La solution 2
Je liquidée aller avec le échapper joyau, qui a la caractéristique supplémentaire de l'utilisation des guillemets par défaut et seulement-escaping backslash si nécessaire.
Autres conseils
Vous pourriez tout aussi bien copier ce que vous voulez . rb dans le coffre de dépôt subversion Ruby (qui est 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