0

いくつかのモジュールを起動するスクリプトファイルがerlangにあります。erlangシェルでは、start関数から返されたオブジェクトを使用したいと思います。

私は自分のファイルを持っています:

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

最終ユーザーがMyReturnVar変数を操作するための最も簡単な方法が必要です。シェルスクリプトでは$ erl -s myfile main、シェルで関数を実行します。

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

別の方法は、シェルから直接モジュールをロードすることです

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

しかし、私はこのソリューションがあまり好きではありません。もっと「1つのコマンド」オプション(またはシェルスクリプトで実行できる連続した複数のコマンド)オプションが必要です。

ありがとうございました

4

3 に答える 3

1

いくつか続けて言うと、あるコマンドの結果を別のコマンドにパイプしたいように聞こえます。そのためには、int のみの戻り値を使用しませんが、stdin と stdout を使用します。つまりMyReturnVar、標準出力に出力することです。そのためには、io:format があります。値のタイプに応じて、次のMyReturnVarようにします。

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

これで、コマンドの結果を他のプロセスにパイプできるはずです。元:

$ erl -s myfile main | cat
于 2012-05-06T18:37:05.780 に答える
0

可能であれば escript を使用してください。

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

これにより、MyReturnVar が出力され、MyReturnVar が返されるため、パイプを使用したり、$? をキャッチしたりできます。シェルスクリプトから。

于 2012-05-08T14:28:31.527 に答える