当我尝试使用像这样的-pz在escript中设置相对代码路径时
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -pz ../dir-of-some-beams
Run Code Online (Sandbox Code Playgroud)
该路径是相对于我运行escript的目录解释的,这使得它无法用于设置相对于脚本位置的路径.
我当前的"解决方法"是使用一个令人烦恼的绝对路径,因为所有这些都是存储库的一部分,我不希望它依赖于位置.
那么如何设置相对于escript所在目录的代码路径呢?
钢筋位于当前目录中.
$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.
谢谢!
将列表转换为[[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个元素组成?我应该使用尾递归函数,列表推导还是其他方法?
我有一个启动应用程序的程序,然后将(子)工作者添加到主管.显然,在做了之后,它就没有什么可做的了,它就会停止(退出).因此,让它不停止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做到这一点?
或者我应该使用不同的解决方案来打包和分发我的程序,实际上更像是服务器/守护程序而不是命令行工具?
我真的不明白命令行参数如何与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
我有一个要使用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 中获取程序的名称?