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/standard/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?

  1. Use platform condition?

  2. Use separate dos_xxx methods?

  3. Put in separate PowerShellwords module?

CREDIT: Lavir the Whiolet

# File lib/standard/facets/shellwords.rb, line 30
def dos_escape(cmdline)
  '"' + cmdline.gsub(/\(?=\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\$/, "\\\\\\").gsub("%", "%%") + '"'
end
escape(cmdline) click to toggle source
# File lib/standard/facets/shellwords.rb, line 17
def escape(cmdline)
  cmdline.gsub(/([\\t\| &`<>)('"])\$/) { |s| '\' << s }
end
parse(argv, opts) click to toggle source

The coolest little arguments parser in all of Rubyland.

CREDIT: Michel Martens

# File lib/standard/facets/shellwords.rb, line 37
def parse(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
Also aliased as: run
run(argv, opts)

Original name for #parse.

Alias for: parse