thorny script argument escaping problem

Robert La Ferla robertlaferla at comcast.net
Tue Jun 20 22:51:15 EDT 2006


I have a wrapper script written in Ruby (this shouldn't matter - it  
could be PERL).  This script passes all command-line arguments to a  
Java program for processing.  The wrapper script should pass all  
arguments "verbatim" to the Java program.

Here's the script:

#!/usr/bin/ruby -w

cmd = "java MyClass" + " "
ARGV.each { |arg| cmd.concat arg+' ' }
system(cmd)

The problem is that some arguments take a quoted string like:

mywrapper --description "This is a test."

The shell is unescaping the arguments so when it calls my Java  
application, it gets:

java MyClass --description This is a test.

Needless to say, this doesn't work.  Furthermore, I cannot require  
the user to double escape either. e.g.  mywrapper --description  
"'This is a test'".  I also need this wrapper to work for other  
programs which may have quite complicated options.  Therefore, it  
should work generically.

Am I missing something obvious?  Suggestions?




More information about the Discuss mailing list