module Shellwords
Public Instance Methods
alt_escape(cmdline)
click to toggle source
Escape special characters used in most unix shells to use it, eg. with system().
This differs from Ruby's escape in that it does not escape shell variables, e.g. $0.
# File lib/facets/shellwords.rb, line 12 def alt_escape(cmdline) cmdline.gsub(/([\\t\| &`<>)('"])/) { |s| '\' << s } end
dos_escape(cmdline)
click to toggle source
Escape special character used in DOS-based shells.
TODO: How to integrate with rest of system?
-
Use platform condition?
-
Use separate dos_xxx methods?
-
Put in separate PowerShellwords module?
CREDIT: Lavir the Whiolet
# File lib/facets/shellwords.rb, line 30 def dos_escape(cmdline) '"' + cmdline.gsub(/\(?=\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\$/, "\\\\\\").gsub("%", "%%") + '"' end
escape(cmdline)
click to toggle source
# File lib/facets/shellwords.rb, line 17 def escape(cmdline) cmdline.gsub(/([\\t\| &`<>)('"])/) { |s| '\' << s } end
run(argv, opts)
click to toggle source
The coolest little arguments parser in all of Rubyland.
CREDIT: Michel Martens
# File lib/facets/shellwords.rb, line 37 def run(argv, opts) argv = (String === argv ? shellwords(argv) : argv.to_a.dup) args = [] while argv.any? item = argv.shift flag = opts[item] if flag # Work around lambda semantics in 1.8.7. arity = [flag.arity, 0].max # Raise if there are not enough parameters # available for the flag. if argv.size < arity raise ArgumentError end # Call the lambda with N items from argv, # where N is the lambda's arity. flag.call(*argv.shift(arity)) else # Collect the items that don't correspond to # flags. args << item end end args end