%cat fact
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -smp enable -sname factorial -mnesia debug verbose
main([String]) ->
try
N = list_to_integer(String),
F = fac(N),
io:format("factorial ~w = ~w\n", [N,F])
catch
_:_ ->
usage()
end;
main(_) ->
usage().
usage() ->
io:format("usage: factorial integer\n"),
halt(1).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
%。/ fact“5”
escript:没有这样的文件或目录:'。/ fact'
%whereisis escript
escript:/ usr / bin / escript
%pacman -Qi erlang
名称:erlang 版本:R14B04-1
为什么不运行“事实”?
在我的Archlinux框中,escript仍然不起作用!
%cat hello.erl
main(_) -> io:fwrite("~p~n", "hello,world!").
%escript hello.erl
escript: no such file or directory: 'hello.erl'
%whereis escript
escript: /usr/bin/escript
%ls -l /usr/bin/escript
lrwxrwxrwx 1 root root 25 12月 18 17:37 /usr/bin/escript -> ../lib/erlang/bin/escript*
%/usr/lib/erlang/bin/escript hello.erl
escript: no such file or directory: 'hello.erl'
%strace -f -F -o aaa.txt /usr/lib/erlang/bin/escript hello.erl
escript: no such file or directory: 'hello.erl
%cat aaa.txt
execve("/usr/lib/erlang/bin/escript", ["/usr/lib/erlang/bin/escript", "hello.erl"], [/* 40 vars */]) = 0
...
open("hello.erl", O_RDONLY|O_LARGEFILE) = 3
...
execve("/usr/lib/erlang/bin/erl", ["/usr/lib/erlang/bin/erl", "+B", "-boot", "start_clean", "-noshell", "-run", "escript", "start", "-extra", "hello.erl"], [/* 40 vars */]) = 0.
...
stat64("hello.erl", 0xb5a44d90) = -1 ENOENT (No such file or directory)
open("hello.erl", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
......
为什么使用“stat64”而不是“stat”?我使用的是32位系统。
%uname -a
Linux myarch 3.1.5-1-ARCH #1 SMP PREEMPT Sun Dec 11 06:26:14 UTC 2011 i686 AMD Athlon(tm) 64 X2 Dual Core Processor 3600+ AuthenticAMD GNU/Linux
%erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 5.8.5
此致!
%ls
fact*
%escript fact "5"
escript: no such file or directory: 'fact'
%escript fact 5
escript: no such file or directory: 'fact
%ls -l /usr/bin/escript
lrwxrwxrwx 1 root root 25 10月 15 03:24 /usr/bin/escript -> ../lib/erlang/bin/escript*
奇怪的问题?
答案 0 :(得分:1)
**注意 * 此答案是为Windows用户定制的,但对其他操作系统用户可以理解和有用
escript
环境变量中是$PATH
吗?通常它隐藏在ERTS_PATH/bin
中,ERTS_PATH
位于Windows 7的C:\Program Files (x86)\erl5.8.4\erts-5.8.4\
中。在Linux或Unix或MAC上查找等效的erts。将此路径(C:\Program Files (x86)\erl5.8.4\erts-5.8.4\bin
)添加到$PATH
。 escript应该可以在任何地方工作
答案 1 :(得分:1)
原因非常简单。因为以下行在〜/ .erlang中:
file:set_cwd("/media/D/www/qachina/db/doc/erlang")
这样escript会在执行后更改当前目录。删除该行后,escript的效果很好。
最诚挚的问候!
答案 2 :(得分:0)
我复制的相同脚本正在运行。
确保在编写完上述脚本后,运行脚本如下
escript <scriptName> <argument>
eg:- escript fact 5
答案 3 :(得分:0)
激活erlang,假设erlang在root:
。 /根/二郎/ r15b01 /激活