如果在foo.m中有Mathematica代码,Mathematica可以用-noprompt
和-initfile foo.m
(或-run "<
$CommandLine
(在那里有额外的垃圾)但是有没有办法让一些mathematica代码像
#!/usr/bin/env MathKernel x = 2+2; Print[x]; Print["There were ", Length[ARGV], " args passed in on the command line."]; linesFromStdin = readList[]; etc.
和chmod它可执行并运行它?换句话说,如何像任何其他脚本语言(Perl,Python,Ruby等)一样使用Mathematica?
MASH - Mathematica Scripting Hack - 将会这样做.
从Mathematica版本6开始,以下perl脚本就足够了:
http://ai.eecs.umich.edu/people/dreeves/mash/mash.pl
对于以前的Mathematica版本,需要一个C程序:
http://ai.eecs.umich.edu/people/dreeves/mash/pre6
更新:最后,Mathematica 8使用"-script"命令行选项原生支持它:
http://www.wolfram.com/mathematica/new-in-8/mathematica-shell-scripts/
这是一个不需要额外帮助程序脚本的解决方案.您可以使用以下shebang直接调用Mathematica内核:
#!/bin/sh exec <"$0" || exit; read; read; exec /usr/local/bin/math -noprompt "$@" | sed '/^$/d'; exit (* Mathematica code starts here *) x = 2+2; Print[x];
shebang代码跳过脚本的前两行,并将其余部分作为标准输入提供给Mathematica内核.的sed的命令删除由内核产生空行.
这种黑客并不像MASH那样多才多艺.因为从stdin读取Mathematica代码,所以不能将stdin用于用户输入,即函数Input和InputString不起作用.