如何使用:emu_args将标志发送到erlang vm?

时间:2019-07-09 20:48:25

标签: elixir mix escript

我想向erlang vm发送参数,但是'emu_args:“ + A32”在“ -escript main parallel_tree_walk_escript”之后出现,并且似乎成为elixir程序的参数,而不影响erlang VM。

如果没有'emu_args:“ + A32”',则由“ mix escript.build”创建的文件包含第三行

%%! -escript main parallel_tree_walk_escript

如果我将emacs(与非ASCII内容完全匹配)更改为该行,我似乎会得到想要的结果

%%! +A32 -escript main parallel_tree_walk_escript

但是,如果我在mix.esx中使用'emu_args:“ + A32”,则该行变为

%%! -escript main parallel_tree_walk_escript +A32

...和“ + A32”似乎并没有进入erlang vm,而是显示为args数组的第一个命令行元素。

# permits emacs edit of parallel_tree_walk result
  def escript do
    [
      main_module: ParallelTreeWalk,
    ]
  end

但这显然将参数放在错误的位置:

  def escript do
    [
      main_module: ParallelTreeWalk,
      emu_args: "+A32"
    ]
  end

我希望

%%! +A32 -escript main parallel_tree_walk_escript

但结果是

%%! -escript main parallel_tree_walk_escript +A32

不起作用。

1 个答案:

答案 0 :(得分:0)

如果我生成脚本,并以与您移动-emu_args标志相同的方式手动添加+A32标志,则无论+A32是在之前还是之后,我都会得到相同的输出脚本名称:

# %%! -emu_args -escript main test_escript +A32 
# %%! +A32 -emu_args -escript main test_escript

两种产品(为了简洁起见,都将其截断了一些路径):

Executing: …beam.smp ./test -B -A32 -- -root …erlang/21.3 -progname erl -- -home /Users/adam -- -boot no_dot_erlang -noshell -escript main test_escript -run escript start -extra ./test

也许您可以尝试添加emu_args参数来查看正在发生的情况。可能是+A32标志进入了VM。

这是我第一次查看电子书,所以我很好奇,关于Beam的论点以-A32而不是+A32结尾,但这似乎与执行仿真器直接或通过脚本。实际上,调用…beam.smp --help确实会列出-A版本以及最后的注释:

  

请注意,如果仿真器是使用erlexec启动的(通常是   来自erl脚本),这些标志应使用+指定。