Creating a shell script to run Java program
Hi Ive just moved over to Linux from Windows and I am trying to convert a Windows batch file to a unix shell script to run a java application, but it so long since Ive used UNIX I cant really remember how to do it.
My script contains
java -jar lib/testapp.jar
These are my failed attempts to run it, not too sure what the differences are but I think the 3rd one is the only one to actually find my shell script.
-bash: testapp.sh: command not found
[root@]# ./ testapp.sh
: bad interpreter: No such file or directory
[root@]# . testapp.sh
Unable to access jarfile lib/testapp.jar
if I just do this at the command line it works fine
[root@]#java -jar lib/testapp.jar
I usually use a little work around for java like this:
1 - Create a little file
2 - Insert something into the app to be executable
echo "java -jar lib/testapp.jar" >> littleapp
3 - Make it executable
chmod +x littleapp
4 - Move it to /usr/bin or /sbin to be able to run it from a shell
mv littleapp /usr/bin
I know this is not the way you wanna do it, but it's another way of doing it that I wanted to let you know. I so need to learn shell scripts :(.
No its still not working. ive just simplified it to run java -version, but still it wont work in shell script
[root@cpc1]# cat testapp
Unrecognized option: -version
Could not create the Java virtual machine.
[root@cpc1]# /opt/jdk1.5.0/bin/java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode)
Your editor is probably adding garbage (i.e. CR) at end of lines.
What gives "od -c testapp" ?
do you actually *have* /bin/sh installed?
try changing it to:
Thankyou, od -c has cracked the problem i have \r at the end.
I recreated the file from scratch and it is now runs ok (im suprised it causes such a problem though)
As for bin/sh the file does exist but is actually a symbolic link to /bin/bash the script seems to run ok without the line at all. So is there any reason to have this line
You shouldn't be surprised, the end of line character (\n) under unix is the single line-feed character, and not the double carriage-return/line-feed like DOS/Windows.
Moreover, CR (\r) is a valid filename character for most unix supported file-systems, so it isn't forbidden, although not a smart idea, to have one interpreter named /bin/sh and another one named /bin/sh\r , and the #! construction should be able to distinguish between them.
About the bash question, it is probably a good idea to leave /bin/sh instead of /bin/bash, as it makes your script more portable, unless you use bash specifics unsupported on the real bourne shell.
|All times are GMT -5. The time now is 10:36 PM.|