problem with spaces and argument parsing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting problem with spaces and argument parsing
# 8  
Old 12-19-2007
I posted the last reply too soon.

If I go back to my original posting, and use this as an sh file:
Code:
#!/bin/sh
echo java  -XX:OnError=\"gdb\ -\ %p\"  HelloWorld
java  -XX:OnError=\"gdb\ -\ %p\"  HelloWorld

then everything works: the echo prints correctly, and the java command fully executes.

Great!

But what I really want in my script is for options like the gdb thing to be env vars that can be reused with multiple java invocations. The simplest version of what I really want my build script to look like is
Code:
#!/bin/sh
option=-XX:OnError=\"gdb - %p\"
echo java  $option  HelloWorld
java  $option  HelloWorld

This gives the output
t.sh: line 2: -: command not found
java HelloWorld
Welcome, master
Its clearly not fully correct because it is not using option.

If I change option's line to use escaped spaces
Code:
option=-XX:OnError=\"gdb\ -\ %p\"

the output is
java -XX:OnError="gdb - %p" HelloWorld
Unrecognized option: -
Could not create the Java virtual machine.
which is again problematic.

This, fortunately, is readily corrected by using quotes around option:
Code:
#!/bin/sh
option=-XX:OnError=\"gdb\ -\ %p\"
echo java  "$option"  HelloWorld
java  "$option"  HelloWorld

which actually fully works.

Unfortunately, what I really want is a more complicated script that would look like this
Code:
#!/bin/sh
errorHandling=-XX:OnError=\"gdb\ -\ %p\"
gcType="-XX:+UseParallelGC  -XX:+UseParallelOldGC"
standardJavaOptions="$errorHandling  $gcType"
echo java  $standardJavaOptions  HelloWorld
java  $standardJavaOptions  HelloWorld

Here, I want to build up top level env vars from smaller env vars. Unfortunately, the above script fails again with the usual error ("Unrecognized option: -"). It seems as if every $ substitution causes quoting space nightmares to reappear. This makes it difficult or impossible to sanely build up top level env vars from smaller env vars?

The above results were obtained on both cygwin and linux.
# 9  
Old 12-19-2007
Quote:
Originally Posted by fabulous2
This makes it difficult or impossible to sanely build up top level env vars from smaller env vars?
Alas yes, an option is to write a small utility shell script which will re-escape it's input...

Also you may want to try using "make" rather than shell to do this and see if it's substitution rules work better.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script not parsing file with spaces in path

Hi everyone, I'm trying to write my first ever shell script, the OS is Raspbian. The code I have written must be executed whenever a certain database has been modified. The database resides on a Windows server to which I have a mount point, and I have no control over the Windows server at all so... (2 Replies)
Discussion started by: gjws
2 Replies

2. Shell Programming and Scripting

Check for spaces in input argument!

Hi guys, I have created a csh script which allows user to pass input argument with the script like: cluster_on_lev3.csh -t <value> -p <value> Example: cluster_on_lev3.csh -t 2.3 -p 0.05 Now I want to create an error code where if user passes input argument without spaces , the code... (16 Replies)
Discussion started by: dixits
16 Replies

3. Shell Programming and Scripting

The last argument contains spaces, how do I get it into a variable?

Gooday I have an argument string that contains 15 arguments. The first 14 arguments are easy to handle because they are separated by spaces ARG14=`echo ${ARGSTRING} | awk '{print $14}'` The last argument is a text that may be empty or contain spaces. So any ideas on how I get the last... (23 Replies)
Discussion started by: zagga
23 Replies

4. Shell Programming and Scripting

parsing argument in perl

in bash: LIST=`cat $1` for i in $LIST do ... done how will i do this in perl ? $1 is my first arguement. I'm a newbie in perl and will appreciate much your help guys ... (4 Replies)
Discussion started by: linuxgeek
4 Replies

5. Shell Programming and Scripting

Question about argument parsing in scripts

Hello all, I am relatively new to linux and bash scripting. I have what seems to be a simple question but I'm having trouble finding the answer. The question is what is the difference between the variables $@ and $*. I've seen them both used in the same context, and I've tried a number of... (4 Replies)
Discussion started by: nicthu
4 Replies

6. Shell Programming and Scripting

Perl Parsing Argument

i wanna passing an argument which read in a file or a set of files if the files are given in the command line, otherwise use STDIN if no file argument. i got something like that, but it is not really working. so can anyone help me? which one is better to use for and how? Use perl. Thank you ... (0 Replies)
Discussion started by: mingming88
0 Replies

7. Shell Programming and Scripting

Problem with parsing filenames containing spaces

I tried using the following options to parse the *.sh files in a dir (the name can contain spaces). But each of them breaks: FILESSH=$(ls /mysh/*.sh) echo "$FILESSH" | while read FILE ; do --- do something --; done This does not break for any whitespaces in filenames for FILE in... (1 Reply)
Discussion started by: amicon007
1 Replies

8. Shell Programming and Scripting

argument parsing...

Hi all, Iam a beginer in shell scripting. i need a script that can parse the arguments and store them in variables. ex: ./myScript -v v1 -h v2 -c v3...... can someone suggest me...? tnx in adv. (1 Reply)
Discussion started by: midhun_u
1 Replies

9. UNIX for Dummies Questions & Answers

command line argument parsing

how to parse the command line argument to look for '@' sign and the following with '.'. In my shell script one of the argument passed is email address. I want to parse this email address to look for correct format. rmjoe123@hotmail.com has '@' sign and followed by a '.' to be more... (1 Reply)
Discussion started by: rmjoe
1 Replies

10. Shell Programming and Scripting

shell script argument parsing

how to parse the command line argument to look for '@' sign and the following with '.'. In my shell script one of the argument passed is email address. I want to parse this email address to look for correct format. rmjoe123@hotmail.com has '@' sign and followed by a '.' to be more... (1 Reply)
Discussion started by: rmjoe
1 Replies
Login or Register to Ask a Question