"escript: нет такого файла или каталога:" ошибка - PullRequest
3 голосов
/ 11 декабря 2011

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

% whereis escript

escript: / usr / bin / escript

% pacman -Qi erlang

name : erlang version : R14B04-1

Почему не запускается скрипт "fact "?


В моем окне 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 ]

1 голос
/ 11 декабря 2011

** ПРИМЕЧАНИЕ * Этот ответ настроен для пользователей Windows, но может быть понят и полезен для других пользователей операционной системы

Является ли escript в переменной среды $PATH?обычно его скрывают в ERTS_PATH/bin, где ERTS_PATH в C:\Program Files (x86)\erl5.8.4\erts-5.8.4\ в Windows 7. Ищите эквивалент в Linux, Unix или MAC для ошибок.добавьте этот путь (C:\Program Files (x86)\erl5.8.4\erts-5.8.4\bin) к $PATH.escript должен уметь работать где угодно

1 голос
/ 22 сентября 2012

Причина очень проста. Потому что следующая строка в ~ / .erlang:

file:set_cwd("/media/D/www/qachina/db/doc/erlang")

, так что escript изменит текущий каталог после выполнения. После удаления этой строки скрипт отлично работает.

С наилучшими пожеланиями!

0 голосов
/ 08 августа 2013

активирует erlang, допустим, что erlang находится в корне:

./ Корень / Erlang / r15b01 / активировать

0 голосов
/ 11 декабря 2011

Тот же скрипт, который я скопировал, и он работает.

Убедитесь, что после написания вышеуказанного скрипта вы запускаете скрипт следующим образом

escript <scriptName> <argument>

eg:- escript fact 5

Для подробной информации: http://www.erlang.org/doc/man/escript.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...