* 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
This commit is contained in:
knu 2012-01-12 18:49:30 +00:00
parent c100aeb838
commit d00fe54803
3 changed files with 24 additions and 2 deletions

View File

@ -1,5 +1,12 @@
Fri Jan 13 03:46:53 2012 Akinori MUSHA <knu@iDaemons.org>
* 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.
* lib/shellwords.rb: Fix rdoc markups.
Fri Jan 13 03:38:36 2012 Akinori MUSHA <knu@iDaemons.org>

5
NEWS
View File

@ -55,6 +55,11 @@ with all sufficient information, see the ChangeLog file.
* Resolv::DNS#timeouts=
* Resolv::DNS::Config#timeouts=
* shellwords
* Shellwords#shellescape() now stringifies the given object using to_s.
* Shellwords#shelljoin() accepts non-string objects in the given
array, each of which is stringified using to_s.
=== Language changes
=== Compatibility issues (excluding feature bug fixes)

View File

@ -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