# 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?

1. Use platform condition?

2. Use separate dos_xxx methods?

3. 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