[kepler-dev] Running Shell Scripts inside Kepler
Christopher Brooks
cxh at eecs.berkeley.edu
Wed Apr 6 09:20:01 PDT 2005
BTW - My hack for the exec command in ptjacl (a 100% Java
implementation of a subset of Tcl)
was to add a -sh command line argument. If -sh is present, then
we use /bin/sh, if not, then we use cmd under Windows etc.
The ptjacl exec command is written in Java and uses the
Runtime.exec(), so it is very similar to CommandLine.
I'm not sure if this would help with CommandLine. It seems dumb
to have to tell the tool whether to use /bin/sh or not, but at
the time it seemed like the quickest solution. It looks
like the problem for here is that sometimes you want /bin/sh,
sometimes you don't. I'm surprised that under Linux and
the Mac, the following did not work for you.
commandArray[0] = "/bin/sh";
commandArray[1] = "-c";
commandArray[2] = "R";
commandArray[3] = "--silent";
commandArray[4] = "--no-restore";
commandArray[5] = "--no-save";
BTW - Under Windows the ptjacl exec command writes out two files
c:/temp/jacl1.bat and c:/temp/jacl2.bat
jacl1.bat looks like:
--start--
@echo off
cmd.exe /C C:\TEMP\jacl2.bat
--end--
--start--
@echo off
C:
cd \cxh\ptII\ptolemy\copernicus\java\test
make "-C" "../cg/ComplexDivide" "MODEL=ComplexDivide"
"SOURCECLASS=../../../../ptolemy/actor/lib/test/auto/ComplexDivide.xml"
"smokeTest"
--end--
This seems a litle byzantine, but it works.
_Christopher
--------
Hi Ilkay (and others)
A few weeks ago, you were asking if I had experience/problems with
running shell scripts using the CommandLine actor. At the time, I did
not, but that situation changed with some recent work on the RExpression
actor. And I discovered some problems (and solutions) which may be of
interest.
In the commandLine actor (and Java in general), the runtime.exec()
method is used to create subprocesses; e.g.
_process = runtime.exec(commandArray);
where, for the Windows OS, the commandArray might be something like
commandArray[0] = "cmd.exe";
commandArray[1] = "/C";
commandArray[2] = "R";
commandArray[3] = "--silent";
commandArray[4] = "--no-restore";
commandArray[5] = "--no-save";
p
In this case, the Windows command line processor 'cmd.exe' is used to
execute the 'R' program. This works fine on a Windows machine and use of
'cmd' to launch the R program means that the PATH system variable is
used to find R. Thus no need for specifying the absolute path.
Now, on Linux or MacOSX, the commandArray (for the CommandLine actor)
uses /bin/sh to execute the command line; e.g.
commandArray[0] = "/bin/sh";
commandArray[1] = "-c";
commandArray[2] = "R";
commandArray[3] = "--silent";
commandArray[4] = "--no-restore";
commandArray[5] = "--no-save";
Now here is where I ran into trouble!!! On Linux and the Mac, 'R' is a
shell script, not a simple executable! And apparently, the Java
runtime.exec() method WILL NOT START A SUBPROCESS SET UP THIS WAY WITH A
SHELL SCRIPT!!!
So what I discovered was that on Unix machines, I can change the
commandArray to directly call the shell script (i.e. not call the shell
to launch it). In this case, the commandArray is just
commandArray[0] = "R";
commandArray[1] = "--silent";
commandArray[2] = "--no-restore";
commandArray[3] = "--no-save";
This worked on both Linux and the MacOSX and the OS still can find a
shell script using PATH (which is cannot do under Windows).
So this solved my problem, but I am not sure exactly how it might work
for the CommandLine actor where it is not obvious whether or not one is
trying to run a shell script. Maybe, we can just drop the '/bin/sh' part
of the commandArray for executables AND shell scripts?
Dan
--
*******************************************************************
Dan Higgins higgins at nceas.ucsb.edu
http://www.nceas.ucsb.edu/ Ph: 805-893-5127
National Center for Ecological Analysis and Synthesis (NCEAS)
Marine Science Building - Room 3405
Santa Barbara, CA 93195
*******************************************************************
_______________________________________________
Kepler-dev mailing list
Kepler-dev at ecoinformatics.org
http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
--------
More information about the Kepler-dev
mailing list