Command line 使用命令行参数、stdin、stdout和stderr从命令行调用Mathematica程序

Command line 使用命令行参数、stdin、stdout和stderr从命令行调用Mathematica程序,command-line,scripting,wolfram-mathematica,Command Line,Scripting,Wolfram Mathematica,如果在foo.m中有Mathematica代码,则可以使用-noprompt 并使用-initfile foo.m (或-运行“尝试 -初始化文件名 然后将exit命令放入程序中MASH——Mathematica脚本黑客——就可以做到这一点 从Mathematica版本6开始,以下perl脚本就足够了: 对于以前的Mathematica版本,需要一个C程序: 更新:Mathematica 8终于通过“-script”命令行选项本机支持此功能: 这里有一个解决方案,它不需要额外的助手脚本。您可

如果在foo.m中有Mathematica代码,则可以使用
-noprompt
并使用
-initfile foo.m
(或
-运行“尝试
-初始化文件名
然后将exit命令放入程序中

MASH——Mathematica脚本黑客——就可以做到这一点

从Mathematica版本6开始,以下perl脚本就足够了:

对于以前的Mathematica版本,需要一个C程序:

更新:Mathematica 8终于通过“-script”命令行选项本机支持此功能:


这里有一个解决方案,它不需要额外的助手脚本。您可以使用以下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];
!/bin/sh

exec假设将Mathematica二进制文件添加到~/.profile中的PATH环境变量

export PATH=$PATH:/Applications/Mathematica.app/Contents/MacOS
然后你就在Mathematica脚本中写下这句话

#!/usr/bin/env MathKernel -script
现在您可以点斜杠您的脚本

$ cat hello.ma
#!/usr/bin/env MathKernel -script

Print["Hello World!"]

$ chmod a+x hello.ma
$ ./hello.ma
"Hello World!"
用Mathematica 8.0测试


小错误:Mathematica在Windows和Mac OS X中引用了Print[s],但在Linux.WTF中没有引用?

我找到了另一个适合我的解决方案

将代码保存在.m文件中,然后按如下方式运行:MathKernel-noprompt-run“< 这是mathematica 7的链接:

$ cat test.m
#!/bin/bash
MathKernel -noprompt -run < <( cat $0| sed -e '1,4d' )  | sed '1d'
exit 0
### code start Here ... ###
Print["Hello World!"]
X=7
X*5

谢谢,这是对-run的一个改进。我更新了这个问题。我有一个我认为更完整的解决方案,我很快就会发布。在我的mash.pl解决方案中,您必须使用-run,而不是-initfile。我不确定为什么,但后者会导致从文件读取mathematica脚本出现问题。
$ cat test.m
#!/bin/bash
MathKernel -noprompt -run < <( cat $0| sed -e '1,4d' )  | sed '1d'
exit 0
### code start Here ... ###
Print["Hello World!"]
X=7
X*5
$ chmod +x test.m

$ ./test.m
"Hello World!"

7
35