0

我在 erlang 中有一个启动一些模块的脚本文件。在 erlang shell 中,我想使用 start 函数返回的对象。

我有我的文件:

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

我想为最终用户提供最简单的方法来操纵MyReturnVar变量。在 shell 脚本中,我$ erl -s myfile main执行 shell 中的函数。

有没有办法在 shell 中获取 MyReturnVar ?

另一种方法是直接从外壳加载模块

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

但我不太喜欢这个解决方案,我想要一个更多的“一个命令”选项(或者我可以在 shell 脚本中连续执行几个)。

谢谢

4

3 回答 3

1

当您连续说几个时,听起来您想将一个命令的结果通过管道传递给另一个命令。为此,您不使用只能是 int 的返回值,而是使用标准输入和标准输出。这意味着您想要打印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

您可以(ab)使用该.erlang文件来实现这一点(参见erl(1)手册页)。或者在erlang-history中到处乱窜 。

于 2012-05-07T13:43:45.570 回答
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,这样您就可以使用管道或只捕获 $? 来自 shell 脚本。

于 2012-05-08T14:28:31.527 回答