2012-05-06 32 views
0

いくつかのモジュールを起動するスクリプトファイルがerlangにあります。 erlangシェルでは、私はstart関数から返されたオブジェクトを使いたいと思います。私はMyReturnVar変数を操作するために、最終的なユーザーのための最も簡単な方法を持っていると思います外部erlangファイルからシェルの戻り値を取得

-module(myfile). 
main() -> 
    %% do some operations 
    MyReturnVar. 

は、私は自分のファイルを持っています。シェルスクリプトでは、シェル内の関数を実行する$ erl -s myfile mainを実行します。

シェルにMyReturnVarを取得する方法はありますか?

もう一つの方法は、シェル

$ erl 
1> X = myfile:main(). 

から直接モジュールをロードすることですが、私はそんなにこのソリューションを好きではない、私はより多くの「一つのコマンド」オプション(または列のいくつかのをみたいです私はシェルスクリプトで行うことができます)。

はあなたに

答えて

1

ありがとうあなたが行にいくつかを言うとき、あなたが望むように、それは別のコマンドにパイプに1つのコマンドの結果が鳴ります。そのためには戻り値を使用しないでください。戻り値はintにしかなりませんが、stdinとstdoutを使用します。意味は、MyReturnVarをstdoutに出力することです。そのためには、io:形式があります。今、あなたが他のプロセスへのあなたのコマンドの結果のパイプにできるはずです

-module(myfile). 
main() -> 
    %% do some operations 
    io:format("~w", [MyReturnVar]), 
    MyReturnVar. 

:値MyReturnVarの種類に応じて、あなたがこのような何かをするだろうです。例:あなたは(AB)(erl(1) manページを参照)、これを達成するために.erlangファイルを使用することができ

$ erl -s myfile main | cat 
+0

端末に結​​果を表示するのではなく、「スクリプト 'run.sh'を実行してから、必要な変数を持つerlangシェルに入れる」という考え方はありません。これらの変数で他のerlang操作を実行できるようにしたい。私は、 'X = myfile:main()'操作よりもそれを行う別の方法があることを知りたかっただけです。 –

0

可能であれば、エスケープを使用してください。

$cat test.escript 
#!/usr/local/bin/escript 
main([]) -> 
     MyReturnVar=1, 
     io:format("~w", [MyReturnVar]), 
     halt(MyReturnVar). 
$escript test.escript 
1 
$echo $? 
1 

これはMyReturnVarをプリントアウトして、パイプまたは単にキャッチ$で使用できるように、MyReturnVarを返すのだろうか?シェルスクリプトから。

関連する問題