summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/shellwords.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/shellwords.rb')
-rw-r--r--ruby_1_9_3/lib/shellwords.rb151
1 files changed, 0 insertions, 151 deletions
diff --git a/ruby_1_9_3/lib/shellwords.rb b/ruby_1_9_3/lib/shellwords.rb
deleted file mode 100644
index abc4e80ad4..0000000000
--- a/ruby_1_9_3/lib/shellwords.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-#
-# shellwords.rb: Manipulates strings a la UNIX Bourne shell
-#
-
-#
-# This module manipulates strings according to the word parsing rules
-# of the UNIX Bourne shell.
-#
-# The shellwords() function was originally a port of shellwords.pl,
-# but modified to conform to POSIX / SUSv3 (IEEE Std 1003.1-2001).
-#
-# Authors:
-# - Wakou Aoyama
-# - Akinori MUSHA <knu@iDaemons.org>
-#
-# Contact:
-# - Akinori MUSHA <knu@iDaemons.org> (current maintainer)
-#
-module Shellwords
- # Splits a string into an array of tokens in the same way the UNIX
- # Bourne shell does.
- #
- # argv = Shellwords.split('here are "two words"')
- # argv #=> ["here", "are", "two words"]
- #
- # String#shellsplit is a shorthand for this function.
- #
- # argv = 'here are "two words"'.shellsplit
- # argv #=> ["here", "are", "two words"]
- def shellsplit(line)
- words = []
- field = ''
- line.scan(/\G\s*(?>([^\s\\\'\"]+)|'([^\']*)'|"((?:[^\"\\]|\\.)*)"|(\\.?)|(\S))(\s|\z)?/m) do
- |word, sq, dq, esc, garbage, sep|
- raise ArgumentError, "Unmatched double quote: #{line.inspect}" if garbage
- field << (word || sq || (dq || esc).gsub(/\\(.)/, '\\1'))
- if sep
- words << field
- field = ''
- end
- end
- words
- end
-
- alias shellwords shellsplit
-
- module_function :shellsplit, :shellwords
-
- class << self
- alias split shellsplit
- end
-
- # Escapes a string so that it can be safely used in a Bourne shell
- # command line.
- #
- # Note that a resulted string should be used unquoted and is not
- # intended for use in double quotes nor in single quotes.
- #
- # open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
- # # ...
- # }
- #
- # String#shellescape is a shorthand for this function.
- #
- # open("| grep #{pattern.shellescape} file") { |pipe|
- # # ...
- # }
- #
- # It is caller's responsibility to encode the string in the right
- # encoding for the shell environment where this string is used.
- # Multibyte characters are treated as multibyte characters, not
- # bytes.
- def shellescape(str)
- # An empty argument will be skipped, so return empty quotes.
- return "''" if str.empty?
-
- str = str.dup
-
- # Treat multibyte characters as is. It is caller's responsibility
- # to encode the string in the right encoding for the shell
- # environment.
- str.gsub!(/([^A-Za-z0-9_\-.,:\/@\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
-
- module_function :shellescape
-
- class << self
- alias escape shellescape
- end
-
- # Builds a command line string from an argument list +array+ joining
- # all elements escaped for Bourne shell and separated by a space.
- #
- # open('|' + Shellwords.join(['grep', pattern, *files])) { |pipe|
- # # ...
- # }
- #
- # Array#shelljoin is a shorthand for this function.
- #
- # open('|' + ['grep', pattern, *files].shelljoin) { |pipe|
- # # ...
- # }
- #
- def shelljoin(array)
- array.map { |arg| shellescape(arg) }.join(' ')
- end
-
- module_function :shelljoin
-
- class << self
- alias join shelljoin
- end
-end
-
-class String
- # call-seq:
- # str.shellsplit => array
- #
- # Splits +str+ into an array of tokens in the same way the UNIX
- # Bourne shell does. See Shellwords::shellsplit for details.
- def shellsplit
- Shellwords.split(self)
- end
-
- # call-seq:
- # str.shellescape => string
- #
- # Escapes +str+ so that it can be safely used in a Bourne shell
- # command line. See Shellwords::shellescape for details.
- def shellescape
- Shellwords.escape(self)
- end
-end
-
-class Array
- # call-seq:
- # array.shelljoin => string
- #
- # Builds a command line string from an argument list +array+ joining
- # all elements escaped for Bourne shell and separated by a space.
- # See Shellwords::shelljoin for details.
- def shelljoin
- Shellwords.join(self)
- end
-end