Visit Our UNIX and Linux User Community

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"?
 
Test Your Knowledge in Computers #434
Difficulty: Medium
jQuery is a vanilla JavaScript library designed to simplify DOM-oriented client-side HTML scripting along with offering cross-browser compatibility.
True or False?

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
GZEXE(1)						      General Commands Manual							  GZEXE(1)

NAME
gzexe - compress executable files in place SYNOPSIS
gzexe name ... DESCRIPTION
The gzexe utility allows you to compress executables in place and have them automatically uncompress and execute when you run them (at a penalty in performance). For example if you execute ``gzexe /usr/bin/gdb'' it will create the following two files: -rwxr-xr-x 1 root root 1026675 Jun 7 13:53 /usr/bin/gdb -rwxr-xr-x 1 root root 2304524 May 30 13:02 /usr/bin/gdb~ /usr/bin/gdb~ is the original file and /usr/bin/gdb is the self-uncompressing executable file. You can remove /usr/bin/gdb~ once you are sure that /usr/bin/gdb works properly. This utility is most useful on systems with very small disks. OPTIONS
-d Decompress the given executables instead of compressing them. SEE ALSO
gzip(1), znew(1), zmore(1), zcmp(1), zforce(1) CAVEATS
The compressed executable is a shell script. This may create some security holes. In particular, the compressed executable relies on the PATH environment variable to find gzip and some standard utilities (basename, chmod, ln, mkdir, mktemp, rm, sleep, and tail). BUGS
gzexe attempts to retain the original file attributes on the compressed executable, but you may have to fix them manually in some cases, using chmod or chown. GZEXE(1)

Featured Tech Videos

All times are GMT -4. The time now is 03:58 PM.
Unix & Linux Forums Content Copyright 1993-2021. All Rights Reserved.
Privacy Policy