PHP 8.2.31
Preview: shellwords.rb Size: 5.94 KB
//proc/thread-self/root/opt/alt/ruby20/lib64/ruby/2.0.0/shellwords.rb

##
# == Manipulates strings like the 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 [1]).
#
# === Usage
#
# You can use shellwords to parse a string into a Bourne shell friendly Array.
#
#   require 'shellwords'
#
#   argv = Shellwords.split('three blind "mice"')
#   argv #=> ["three", "blind", "mice"]
#
# Once you've required Shellwords, you can use the #split alias
# String#shellsplit.
#
#   argv = "see how they run".shellsplit
#   argv #=> ["see", "how", "they", "run"]
#
# Be careful you don't leave a quote unmatched.
#
#   argv = "they all ran after the farmer's wife".shellsplit
#        #=> ArgumentError: Unmatched double quote: ...
#
# In this case, you might want to use Shellwords.escape, or it's alias
# String#shellescape.
#
# This method will escape the String for you to safely use with a Bourne shell.
#
#   argv = Shellwords.escape("special's.txt")
#   argv #=> "special\\s.txt"
#   system("cat " + argv)
#
# Shellwords also comes with a core extension for Array, Array#shelljoin.
#
#   argv = %w{ls -lta lib}
#   system(argv.shelljoin)
#
# You can use this method to create an escaped string out of an array of tokens
# separated by a space. In this example we'll use the literal shortcut for
# Array.new.
#
# === Authors
# * Wakou Aoyama
# * Akinori MUSHA <knu@iDaemons.org>
#
# === Contact
# * Akinori MUSHA <knu@iDaemons.org> (current maintainer)
#
# === Resources
#
# 1: {IEEE Std 1003.1-2004}[http://pubs.opengroup.org/onlinepubs/009695399/toc.htm]

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 shortcut 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.  +str+ can be a non-string object that responds to
  # +to_s+.
  #
  # Note that a resulted string should be used unquoted and is not
  # intended for use in double quotes nor in single quotes.
  #
  #   argv = Shellwords.escape("It's better to give than to receive")
  #   argv #=> "It\\'s\\ better\\ to\\ give\\ than\\ to\\ receive"
  #
  # String#shellescape is a shorthand for this function.
  #
  #   argv = "It's better to give than to receive".shellescape
  #   argv #=> "It\\'s\\ better\\ to\\ give\\ than\\ to\\ receive"
  #
  #   # Search files in lib for method definitions
  #   pattern = "^[ \t]*def "
  #   open("| grep -Ern #{pattern.shellescape} lib") { |grep|
  #     grep.each_line { |line|
  #       file, lineno, matched_line = line.split(':', 3)
  #       # ...
  #     }
  #   }
  #
  # It is the 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.
  #
  # Returns an empty quoted String if +str+ has a length of zero.
  def shellescape(str)
    str = str.to_s

    # 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+.
  #
  # All elements are joined into a single string with fields separated by a
  # space, where each element is escaped for Bourne shell and stringified using
  # +to_s+.
  #
  #   ary = ["There's", "a", "time", "and", "place", "for", "everything"]
  #   argv = Shellwords.join(ary)
  #   argv #=> "There\\'s a time and place for everything"
  #
  # Array#shelljoin is a shortcut for this function.
  #
  #   ary = ["Don't", "rock", "the", "boat"]
  #   argv = ary.shelljoin
  #   argv #=> "Don\\'t rock the boat"
  #
  # You can also mix non-string objects in the elements as allowed in Array#join.
  #
  #   output = `#{['ps', '-p', $$].shelljoin}`
  #
  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

Directory Contents

Dirs: 30 × Files: 78

Name Size Perms Modified Actions
cgi DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
date DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
digest DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
dl DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
drb DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
fiddle DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
irb DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
json DIR
- drwxr-xr-x 2024-03-03 22:43:37
Edit Download
matrix DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
net DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
openssl DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
optparse DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
psych DIR
- drwxr-xr-x 2024-03-03 22:43:38
Edit Download
racc DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
rake DIR
- drwxr-xr-x 2024-03-03 22:53:08
Edit Download
rbconfig DIR
- drwxr-xr-x 2024-03-03 22:43:42
Edit Download
rdoc DIR
- drwxr-xr-x 2024-03-03 22:43:41
Edit Download
rexml DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
rinda DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
ripper DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
rss DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
rubygems DIR
- drwxr-xr-x 2024-03-03 22:43:42
Edit Download
shell DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
syslog DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
test DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
uri DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
webrick DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
- drwxr-xr-x 2024-03-03 22:43:38
Edit Download
xmlrpc DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
yaml DIR
- drwxr-xr-x 2024-03-03 22:43:33
Edit Download
3.31 KB lrw-r--r-- 2013-02-24 05:06:42
Edit Download
2.63 KB lrw-r--r-- 2009-10-02 10:45:39
Edit Download
17.94 KB lrw-r--r-- 2012-07-18 03:56:58
Edit Download
9.39 KB lrw-r--r-- 2012-11-30 05:06:45
Edit Download
7.22 KB lrw-r--r-- 2011-07-23 12:14:43
Edit Download
380 B lrw-r--r-- 2009-08-16 15:34:35
Edit Download
81.32 KB lrw-r--r-- 2014-09-17 05:56:35
Edit Download
946 B lrw-r--r-- 2023-07-26 14:09:00
Edit Download
28.90 KB lrw-r--r-- 2013-02-02 05:04:54
Edit Download
9.78 KB lrw-r--r-- 2014-04-30 07:45:49
Edit Download
2.24 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
280 B lrw-r--r-- 2023-07-26 14:09:00
Edit Download
19 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
3.80 KB lrw-r--r-- 2011-05-19 00:07:25
Edit Download
6.44 KB lrw-r--r-- 2013-02-04 02:50:20
Edit Download
26.08 KB lrw-r--r-- 2014-09-03 04:42:39
Edit Download
2.14 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
1.25 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
46.35 KB lrw-r--r-- 2014-10-16 07:23:46
Edit Download
2.08 KB lrw-r--r-- 2012-09-20 07:14:54
Edit Download
7.56 KB lrw-r--r-- 2013-01-04 02:52:54
Edit Download
15.38 KB lrw-r--r-- 2013-12-24 15:46:01
Edit Download
8.86 KB lrw-r--r-- 2014-07-07 03:55:25
Edit Download
26.17 KB lrw-r--r-- 2013-02-23 04:03:59
Edit Download
20.03 KB lrw-r--r-- 2013-02-05 15:57:19
Edit Download
1.74 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
5.74 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
20.96 KB lrw-r--r-- 2013-07-13 15:16:09
Edit Download
6.52 KB lrw-r--r-- 2011-08-26 22:22:37
Edit Download
45.02 KB lrw-r--r-- 2013-02-05 05:43:36
Edit Download
78.19 KB lrw-r--r-- 2023-07-26 14:06:15
Edit Download
6.93 KB lrw-r--r-- 2012-11-16 16:55:29
Edit Download
2.00 KB lrw-r--r-- 2013-02-24 04:49:04
Edit Download
5.71 KB lrw-r--r-- 2012-08-21 13:03:30
Edit Download
23.66 KB lrw-r--r-- 2014-02-16 17:02:51
Edit Download
21.17 KB lrw-r--r-- 2013-01-13 04:40:15
Edit Download
528 B lrw-r--r-- 2023-07-26 14:09:00
Edit Download
51.27 KB lrw-r--r-- 2014-02-19 16:38:03
Edit Download
7.64 KB lrw-r--r-- 2012-10-28 21:20:10
Edit Download
15.30 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
13.14 KB lrw-r--r-- 2012-08-15 11:50:01
Edit Download
9.63 KB lrw-r--r-- 2011-08-02 15:25:59
Edit Download
13.98 KB lrw-r--r-- 2013-01-13 05:07:08
Edit Download
205 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
4.29 KB lrw-r--r-- 2013-02-03 00:38:46
Edit Download
14.85 KB lrw-r--r-- 2012-11-11 04:23:04
Edit Download
9.90 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
2.07 KB lrw-r--r-- 2012-11-29 19:16:46
Edit Download
308 B lrw-r--r-- 2009-09-24 00:42:23
Edit Download
4.88 KB lrw-r--r-- 2013-02-19 05:06:36
Edit Download
1.73 KB lrw-r--r-- 2013-04-03 17:27:19
Edit Download
61.45 KB lrw-r--r-- 2015-06-01 15:13:01
Edit Download
2.53 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
2.84 KB lrw-r--r-- 2011-05-11 10:22:16
Edit Download
27.53 KB lrw-r--r-- 2023-07-26 14:06:15
Edit Download
23.52 KB lrw-r--r-- 2011-11-05 07:37:47
Edit Download
8.56 KB lrw-r--r-- 2012-09-13 13:01:23
Edit Download
17.32 KB lrw-r--r-- 2012-11-24 18:51:45
Edit Download
10.30 KB lrw-r--r-- 2012-12-05 02:55:07
Edit Download
5.94 KB lrw-r--r-- 2012-11-09 06:28:00
Edit Download
4.02 KB lrw-r--r-- 2011-05-18 14:09:38
Edit Download
25.76 KB lrw-r--r-- 2023-07-26 14:09:00
Edit Download
7.26 KB lrw-r--r-- 2012-12-23 10:18:58
Edit Download
10.15 KB lrw-r--r-- 2013-10-09 16:11:16
Edit Download
6.94 KB lrw-r--r-- 2014-02-09 16:07:41
Edit Download
3.38 KB lrw-r--r-- 2011-06-29 03:09:34
Edit Download
21.09 KB lrw-r--r-- 2013-10-09 15:07:45
Edit Download
3.16 KB lrw-r--r-- 2013-04-14 15:20:33
Edit Download
4.15 KB lrw-r--r-- 2012-12-12 12:40:51
Edit Download
6.54 KB lrw-r--r-- 2013-02-04 17:59:52
Edit Download
6.79 KB lrw-r--r-- 2009-03-06 04:23:05
Edit Download
268 B lrw-r--r-- 2009-10-02 10:45:39
Edit Download
8.34 KB lrw-r--r-- 2012-08-03 08:23:18
Edit Download
3.07 KB lrw-r--r-- 2011-05-13 20:03:21
Edit Download
3.23 KB lrw-r--r-- 2012-12-02 07:57:45
Edit Download
6.70 KB lrw-r--r-- 2012-11-07 06:49:57
Edit Download
8.49 KB lrw-r--r-- 2012-09-13 02:24:08
Edit Download
2.30 KB lrw-r--r-- 2013-05-19 19:01:43
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).