标签: erlang-escript

Escript:设置相对于脚本目录的代码路径

当我尝试使用像这样的-pz在escript中设置相对代码路径时

#!/usr/bin/env escript
%% -*- erlang -*-
%%! -pz ../dir-of-some-beams
Run Code Online (Sandbox Code Playgroud)

该路径是相对于我运行escript的目录解释的,这使得它无法用于设置相对于脚本位置的路径.

我当前的"解决方法"是使用一个令人烦恼的绝对路径,因为所有这些都是存储库的一部分,我不希望它依赖于位置.

那么如何设置相对于escript所在目录的代码路径呢?

erlang erlang-escript

7
推荐指数
1
解决办法
2051
查看次数

为什么不能运行?

钢筋位于当前目录中.

$ls -l rebar
--rwxr-xr-x  1 ***  wheel  90778  8  6 23:05 rebar*
$./rebar
escript: no such file or directory: './rebar'

$whereis escript
escript: /usr/local/bin/escript
Run Code Online (Sandbox Code Playgroud)

我使用的是FreeBSD 9.0.

谢谢!

erlang rebar erlang-escript

5
推荐指数
1
解决办法
3023
查看次数

将列表列表转换为元组列表的最佳方法是什么?

将列表转换为[[1,2,3],[a,b,c],[4,5,6]]像这样的元组列表的最佳方法是什么:

[{1,a,4},{2,b,5},{3,c,6}]
Run Code Online (Sandbox Code Playgroud)

元组N由三个子列表中的每一个的第N个元素组成?我应该使用尾递归函数,列表推导还是其他方法?

erlang erlang-shell erlang-escript

5
推荐指数
2
解决办法
1564
查看次数

如何构建一个Elixir escript,它不会在执行后停止Erlang VM(如elixir --no-halt)

我有一个启动应用程序的程序,然后将(子)工作者添加到主管.显然,在做了之后,它就没有什么可做的了,它就会停止(退出).因此,让它不停止VM将允许工作人员工作.

我提出的唯一解决方案是添加:

IO.gets "Working... To finish hit <Enter>."
Run Code Online (Sandbox Code Playgroud)

在末尾...

我希望escript在运行之后构建一个不会像以下那样停止Erlang VM:

elixir --no-halt -S mix run --eval 'MyApp.CLI.m
ain(["some-arg"])'
Run Code Online (Sandbox Code Playgroud)

要么

mix run --no-halt --eval 'MyApp.CLI.m
ain(["some-arg1,some-arg2"])'
Run Code Online (Sandbox Code Playgroud)

有没有办法用escript做到这一点?

或者我应该使用不同的解决方案来打包和分发我的程序,实际上更像是服务器/守护程序而不是命令行工具?

erlang elixir erlang-escript

4
推荐指数
1
解决办法
876
查看次数

Erlang escript参数

我真的不明白命令行参数如何与escripts一起使用.从联机帮助页中,我了解到参数作为字符串列表传递给main/1.如何解析传递给main的参数?

考虑以下:

#!/usr/bin/env escript
usage() ->
  io:format("Usage: ~s <port#>~n",[escript:script_name()]),
  halt(1).

main([]) ->
  usage();
main(Args)->
  io:format("Starting test server on port #~s~n",[Args]).
Run Code Online (Sandbox Code Playgroud)

一个简单的测试,只用一个参数看起来很好.

  ./test_server.erl 17001
   Starting test server on port #17001
Run Code Online (Sandbox Code Playgroud)

如果我传入多个参数怎么办?

  ./test_server.erl 17001 8 9 abc
   Starting test server on port #1700189abc
Run Code Online (Sandbox Code Playgroud)

那不是我想要的.我尝试在空格字符上拼出字符串:

  ....
  ArgsList = string:tokens(Args, " "),
  io:format("Length: ~w~n",[length(ArgsList)]),
  ....
Run Code Online (Sandbox Code Playgroud)

产量长度:1

erlang erlang-escript

2
推荐指数
1
解决办法
2018
查看次数

如何在escript程序中获取程序名称?

我有一个要使用escript以下命令运行的 Erlang 程序:

% filename: myscript.erl
-export([main/1]).

main(Args) ->
    io:format("Args: ~p~n", [Args]).
Run Code Online (Sandbox Code Playgroud)

当我运行时escript myscript.erl 123 456,会打印:

Args: ["123","456"]
Run Code Online (Sandbox Code Playgroud)

这很好,但是程序的名称(即myscript.erl)在哪里?

在C语言中,例如int main(int argc, char *argv[]) { ... }argv[0]总是包含程序的名称。如何在 Erlang 中获取程序的名称?

erlang command-line-arguments erlang-escript

2
推荐指数
1
解决办法
105
查看次数