“escript:没有这样的文件或目录:”错误

时间:2011-12-11 04:04:47

标签: erlang

%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*

奇怪的问题?

4 个答案:

答案 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

详细信息: http://www.erlang.org/doc/man/escript.html

答案 3 :(得分:0)

激活erlang,假设erlang在root:

。 /根/二郎/ r15b01 /激活