aboutsummaryrefslogtreecommitdiffstats
path: root/lib/shellwords.rb
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-12 18:49:30 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-01-12 18:49:30 +0000
commitd00fe54803361cb0a63325427f91a745a2488b72 (patch)
treef26d4632bd7677fc389c43b27c89efd19f60df8a /lib/shellwords.rb
parentc100aeb8384ce45a073741b649b14be6c211d2e6 (diff)
downloadruby-d00fe54803361cb0a63325427f91a745a2488b72.tar.gz
* lib/shellwords.rb (Shellwords#shellescape): shellescape() now
stringifies the given object using to_s. * lib/shellwords.rb (Shellwords#shelljoin): shelljoin() accepts non-string objects in the given array, each of which is stringified using to_s. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34287 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/shellwords.rb')
-rw-r--r--lib/shellwords.rb14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/shellwords.rb b/lib/shellwords.rb
index 550c2693de..2aaa30c23c 100644
--- a/lib/shellwords.rb
+++ b/lib/shellwords.rb
@@ -57,7 +57,8 @@ module Shellwords
end
# Escapes a string so that it can be safely used in a Bourne shell
- # command line.
+ # 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.
@@ -77,6 +78,8 @@ module Shellwords
# Multibyte characters are treated as multibyte characters, not
# bytes.
def shellescape(str)
+ str = str.to_s
+
# An empty argument will be skipped, so return empty quotes.
return "''" if str.empty?
@@ -101,7 +104,9 @@ module Shellwords
end
# Builds a command line string from an argument list +array+ joining
- # all elements escaped for Bourne shell and separated by a space.
+ # all elements escaped for Bourne shell into a single string with
+ # fields separated by a space, where each element is stringified
+ # using +to_s+.
#
# open('|' + Shellwords.join(['grep', pattern, *files])) { |pipe|
# # ...
@@ -113,6 +118,11 @@ module Shellwords
# # ...
# }
#
+ # It is allowed to 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