コマンドラインargs、stdin、stdout、stderrを使用して、コマンドラインからMathematicaプログラムを呼び出す

StackOverflow https://stackoverflow.com/questions/148057

質問

foo.mにMathematicaコードがある場合、-nopromptでMathematicaを呼び出すことができます および-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をどのように使用しますか?

役に立ちましたか?

解決

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

UPDATE:ついにMathematica 8は<!> quot; -script <!> quot;でこれをネイティブにサポートします。コマンドラインオプション:

http://www.wolfram.com/ mathematica / new-in-8 / mathematica-shell-scripts /

他のヒント

これは、追加のヘルパースクリプトを必要としないソリューションです。次のシェバンを使用して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コードは、スクリプトの最初の2行をスキップし、残りをMathematicaカーネルに標準入力として送ります。 sed コマンドは、カーネルによって生成された空の行をドロップします。

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

試用
-initfile ファイル名
そして、exitコマンドをプログラムに追加します

〜/ .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は囲みません。 WTF?

私に合った別の解決策を見つけました。

コードを.mファイルに保存し、次のように実行します。MathKernel -noprompt -run <!>#8220; <!> lt;

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

数学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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top