Sponsored Content
Top Forums Shell Programming and Scripting problem with spaces and argument parsing Post 302152054 by fabulous2 on Tuesday 18th of December 2007 11:35:48 AM
Old 12-18-2007
problem with spaces and argument parsing

[Preliminaries: the discussion below will refer to a Java class named HelloWorld. Its totally irrelevant to this posting what that class does, since the problem that I describe has to do with the shell, not Java. Its just that the problem arose for me while doing some coding, and I could not think of a more universal illustration.

Nevertheless, if you need something concrete in order to duplicate my actions, then the source file HelloWorld.java that I used contained the text
Code:
public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Welcome, master");
	}
}

and I compiled using
javac HelloWorld.java
]



Suppose that I execute the following command directly from the shell:
java -XX:OnError="gdb - %p" HelloWorld
Then it works perfectly fine, as expected.

Now suppose that I create the following shell script:
Code:
#!/bin/sh
echo java  -XX:OnError=\"gdb - %p\"  HelloWorld
java  -XX:OnError=\"gdb - %p\"  HelloWorld

The output now is:
java -XX:OnError="gdb - %p" HelloWorld
Unrecognized option: -
Could not create the Java virtual machine.
OK, the echo line outputs exactly what was previously executed directly from the shell, but the script's attempt to execute it fails. The error message hints that the
"gdb - %p"
is actually being interpreted as 3 different words for some strange reason, namely
"gdb
-
%p"
In fact, I think that I can confirm this by modifying the script to be
Code:
#!/bin/sh
echo java  -XX:OnError=\"gdb - %p\"  HelloWorld
set -x
java  -XX:OnError=\"gdb - %p\"  HelloWorld
set +x

which outputs
java -XX:OnError="gdb - %p" HelloWorld
+ java '-XX:OnError="gdb' - '%p"' HelloWorld
Unrecognized option: -
Could not create the Java virtual machine.
+ set +x
Notice how set -x puts the first pair of single quotes around just
-XX:OnError="gdb
and then the next pair around
%p"
So what is the shell script doing in its interpretation of the text that the shell command line does not do that is causing this to fail?

I guess that shell scripts are not exactly like saved command line sessions after all?

Could I work around this by using some sort of octal escape or something for the spaces inside "gdb - %p"?
 

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

5. 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

6. 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

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

8. 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

9. 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

10. 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
GJAVAH(1)								GNU								 GJAVAH(1)

NAME
gjavah - - generate header files from Java class files SYNOPSIS
gjavah ... DESCRIPTION
The gjavah program is used to generate header files from class files. It can generate both CNI and JNI header files, as well as stub implementation files which can be used as a basis for implementing the required native methods. OPTIONS
-d DIR Set output directory. -o FILE Set output file (only one of -d or -o may be used). -cmdfile FILE Read command file. -all DIR Operate on all class files under directory DIR. -stubs Emit stub implementation. -jni Emit JNI stubs or header (default). -cni Emit CNI stubs or header (default JNI). -verbose Set verbose mode. -force Output files should always be written. Class path options: -classpath PATH Set the class path. -IDIR Add directory to class path. -bootclasspath PATH Set the boot class path. -extdirs PATH Set the extension directory path. Standard options: -help Print help text, then exit. -version Print version number, then exit. -JOPTION Pass argument to the Java runtime. BUGS
SEE ALSO
javac(1), ... AUTHOR
0.98 2010-07-05 GJAVAH(1)
All times are GMT -4. The time now is 03:37 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy