Method: Escape#shell_command
- Defined in:
- lib/escape.rb
#shell_command(command) ⇒ Object (private)
Escape.shell_command composes a sequence of words to a single shell command line. All shell meta characters are quoted and the words are concatenated with interleaving space.
Escape.shell_command(["ls", "/"]) #=> "ls /"
Escape.shell_command(["echo", "*"]) #=> "echo '*'"
Note that system(*command) and system(Escape.shell_command(command)) is roughly same. There are two exception as follows.
-
The first is that the later may invokes /bin/sh.
-
The second is an interpretation of an array with only one element: the element is parsed by the shell with the former but it is recognized as single word with the later. For example, system(*[“echo foo”]) invokes echo command with an argument “foo”. But system(Escape.shell_command([“echo foo”])) invokes “echo foo” command without arguments (and it probably fails).
52 53 54 |
# File 'lib/escape.rb', line 52 def shell_command(command) command.map {|word| shell_single_word(word) }.join(' ') end |