18

foo.mにMathematicaコードがある場合、Mathematicaは (または)-noprompt を使って呼び出すことができ、コマンドライン引数は(そこに余分なジャンクを入れて)で利用できますが、次のような数学コードを作成する方法はありますか?-initfile foo.m-run "<<foo.m"$CommandLine

#!/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をどのように使用するのでしょうか?

4

6 に答える 6

11

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/

于 2008-09-30T03:29:27.867 に答える
6

これは、追加のヘルパー スクリプトを必要としないソリューションです。次のシバンを使用して 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];

シバン コードはスクリプトの最初の 2 行をスキップし、残りを標準入力として Mathematica カーネルに送ります。sedコマンドは、カーネルによって生成された空の行を削除します。

このハックはMASHほど用途が広くありません。Mathematica のコードは標準入力から読み取られるため、ユーザー入力に標準入力を使用することはできません。つまり、関数InputおよびInputStringは機能しません。

于 2010-08-14T19:48:05.003 に答える
5

~/.profile の PATH 環境変数に Mathematica バイナリを追加すると仮定すると、

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 では囲みません。なんてこと?

于 2011-11-01T20:32:43.407 に答える
4


-initfile filenameを試して
、終了コマンドをプログラムに入れます

于 2008-09-29T09:26:02.637 に答える
2

私のために働く別の解決策を見つけました。

コードを .m ファイルに保存し、次のように実行します: MathKernel -noprompt -run “<

これはリンクです: http://bergmanlab.smith.man.ac.uk/?p=38

于 2012-06-24T12:01:31.827 に答える
1

数学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

使用法:

$ chmod +x test.m

$ ./test.m
"Hello World!"

7
35
于 2013-02-16T07:06:39.547 に答える