Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

mathematica scripts (should work like perl and shell scripts)

65 views
Skip to first unread message

Daniel Reeves

unread,
May 1, 1999, 3:00:00 AM5/1/99
to
I'd like to be able to create a file like the following:

test.mma:
#!/bin/math -script
a = 2 + 2;
(* do some other stuff... *)
Print[a];
(* do more stuff... *)

then when I make test.mma executable and run it, it should print 4 to
stdout. Nothing else should go to stdout, just what's explicitly written.
This is the way that perl and shell scripts work and it would be very
convenient/nice/powerful for mathematica to work this way too. For
example, you could use mathematica directly as a cgi script.

There are some issues though---things the kernel would have to do
differently when the -script option was specified:
1) allow an input file to be specified as a command line arg
2) ignore the first line of the input file (the #!/bin/math...)
(this is automatic in perl and shell scripts since # is comment)
3) allow a single command to span multiple lines
(a way to do this would be ignore newlines except after semi-colons)
4) not print anything to stdout unless told to
(a stricter version of -batchoutput)

Let me know your thoughts, especially Wolfram developers. Too bad it's
too late for version 4!


Thanks,
Daniel

-- -- -- -- -- -- -- -- -- -- -- --
Daniel Reeves http://ai.eecs.umich.edu/people/dreeves/

A UNIX saleslady, Lenore,
Enjoys work, but she likes the beach more.
She found a good way
To combine work and play:
She sells C shells by the seashore.

Paul Abbott

unread,
May 6, 1999, 3:00:00 AM5/6/99
to
Daniel Reeves wrote:

> I'd like to be able to create a file like the following:
>
> test.mma:
> #!/bin/math -script
> a = 2 + 2;
> (* do some other stuff... *)
> Print[a];
> (* do more stuff... *)
>
> then when I make test.mma executable and run it, it should print 4 to
> stdout. Nothing else should go to stdout, just what's explicitly written.
> This is the way that perl and shell scripts work and it would be very
> convenient/nice/powerful for mathematica to work this way too. For
> example, you could use mathematica directly as a cgi script.

You should have a look into MathScript <http://www.mathscript.com/>

> There are some issues though---things the kernel would have to do
> differently when the -script option was specified:
> 1) allow an input file to be specified as a command line arg
> 2) ignore the first line of the input file (the #!/bin/math...)
> (this is automatic in perl and shell scripts since # is comment)
> 3) allow a single command to span multiple lines
> (a way to do this would be ignore newlines except after semi-colons)
> 4) not print anything to stdout unless told to
> (a stricter version of -batchoutput)

I'm not sure that I understand exactly what you want. If test.mma
contains the following commands:

a=2+2
b=10!;
a+b

then, running Mathematica in batch mode, only output for the first and
third commands goes to stdout:

# math -batchinput -batchoutput < test.mma

4

3628804

You can get 3) by appending a \ to long line and 4) by appending ;

Cheers,
Paul

____________________________________________________________________
Paul Abbott Phone: +61-8-9380-2734
Department of Physics Fax: +61-8-9380-1014
The University of Western Australia
Nedlands WA 6907 mailto:pa...@physics.uwa.edu.au
AUSTRALIA http://www.physics.uwa.edu.au/~paul

God IS a weakly left-handed dice player
____________________________________________________________________


P.J. Hinton

unread,
May 6, 1999, 3:00:00 AM5/6/99
to
On Mon, 3 May 1999 in article <7gfr4a$6...@smc.vnet.net>, Daniel Reeves
<dre...@eecs.umich.edu> writes:

> I'd like to be able to create a file like the following:
>
> test.mma:
> #!/bin/math -script
> a = 2 + 2;
> (* do some other stuff... *)
> Print[a];
> (* do more stuff... *)
>
> then when I make test.mma executable and run it, it should print 4 to
> stdout. Nothing else should go to stdout, just what's explicitly written.
> This is the way that perl and shell scripts work and it would be very
> convenient/nice/powerful for mathematica to work this way too. For
> example, you could use mathematica directly as a cgi script.
>

> There are some issues though---things the kernel would have to do
> differently when the -script option was specified:
> 1) allow an input file to be specified as a command line arg
> 2) ignore the first line of the input file (the #!/bin/math...)
> (this is automatic in perl and shell scripts since # is comment)
> 3) allow a single command to span multiple lines
> (a way to do this would be ignore newlines except after semi-colons)
> 4) not print anything to stdout unless told to
> (a stricter version of -batchoutput)
>

> Let me know your thoughts, especially Wolfram developers. Too bad it's
> too late for version 4!

You can do something linke this in Mathematica 3 and earlier if you're
working under a Unix shell.

Here is a script input file, which I denote with a file named "test.m":

[cut here]


a = 2 + 2;

Write["stdout", a];
[cut here]

Your parent shell script (what you call "test.mma") would look something
like this:

[cut here]
#!/bin/sh
$topdir=/usr/local/mathematica # path to Mathematica installation.
unsetenv DISPLAY # optional -- needed only if shell has this variable set
math -batchinput -batchoutput < $@
[cut here]

Multiline inputs in test.m are permissible provided that the syntax
satisifes the criteria in Section A.2.10 of _The Mathematica Book_.

FrontEndExecute[FrontEnd`HelpBrowserLookup["MainBook", "A.2.10"]]

--
P.J. Hinton
Mathematica Programming Group pa...@wolfram.com
Wolfram Research, Inc. http://www.wolfram.com/~paulh/
Disclaimer: Opinions expressed herein are those of the author alone.

0 new messages