GoGPT Best VPN GoSearch

Значок OnWorks

escript - Интернет в облаке

Запуск сценария в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это командный сценарий, который можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


escript - поддержка сценариев Erlang

ОПИСАНИЕ


секретный кодекс обеспечивает поддержку запуска коротких программ на Erlang без необходимости их компиляции
первый и простой способ получить аргументы командной строки.

ЭКСПОРТ


имя-скрипта скрипт-arg1 скрипт-аргумент2 ...
секретный кодекс эскрипт-флаги имя-скрипта скрипт-arg1 скрипт-аргумент2 ...

секретный кодекс запускает сценарий, написанный на Erlang.

Вот пример.

$ chmod u + x факториал
$ cat факториал
#!/ usr / bin / env секретный кодекс
%% - * - эрланг - * -
%%! -smp enable -sname factorial -mnesia подробный отладчик
main ([String]) ->
стараться
N = list_to_integer (строка),
F = fac (N),
io: format ("факториал ~ w = ~ w \ n", [N, F])
поймать
_: _ ->
использование()
конец;
основной (_) ->
использование().

использование () ->
io: format ("использование: факториальное целое число \ n"),
стой(1).

FAC(0) -> 1;
fac (N) -> N * fac (N-1).
$. / фактор 5
факториал 5 = 120
$ ./факториал
использование: факториальное целое число
$. / фактор пять
использование: факториальное целое число

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

$ escript факториал 5

содержимое первой строки не имеет значения, но не может содержать код Erlang
так как это будет проигнорировано.

Вторая строка в примере содержит необязательную директиву для Emacs редактор
что заставляет его войти в основной режим редактирования исходных файлов Erlang. Если
директива присутствует, она должна быть расположена во второй строке.

Если есть комментарий, выбрав кодирование он может располагаться на второй линии.

Примечание:
Кодировка, указанная в вышеупомянутом комментарии, применяется к самому скрипту.
Однако кодировка сервера ввода-вывода должна быть установлена ​​явно следующим образом:

io: setopts ([{кодировка, юникод}])

Кодировка по умолчанию сервера ввода-вывода для стандарт_io is latin1 так как сценарий
работает в неинтерактивном терминале (см. . Unicode in Erlang).

В третьей строке (или второй в зависимости от наличия Emacs
директива), можно передать аргументы эмулятору, например

%%! -smp enable -sname factorial -mnesia подробный отладчик

Такая строка аргумента должна начинаться с %%! и остальная часть строки будет интерпретирована
в качестве аргументов эмулятору.

Если вы знаете, где находится секретный кодекс исполняемый файл, первая строка может напрямую
дать путь секретный кодекс, Например:

#! / usr / local / bin / escript

Как и любые другие сценарии, сценарии Erlang не будут работать на платформах Unix, если
бит выполнения для файла сценария не установлен. (Использовать CHMOD +x имя-скрипта включать
бит выполнения.)

Остальная часть файла сценария Erlang может содержать либо Erlang источник код,
встроенный луч файл или встроенный архив файл.

Файл сценария Erlang всегда должен содержать функцию главная / 1. Когда сценарий
беги, главная / 1 функция будет вызываться со списком строк, представляющих
аргументы, передаваемые скрипту (никаким образом не изменяемые и не интерпретируемые).

Если же линия индикатора главная / 1 функция в сценарии успешно возвращается, статус выхода для
script будет 0. Если во время выполнения сгенерировано исключение, короткое сообщение
будет напечатан, и сценарий завершится со статусом выхода 127.

Чтобы вернуть собственный ненулевой код выхода, позвоните остановка (ExitCode); например:

стой(1).

Позвонить escript: имя_сценария () из вашего в скрипт, чтобы получить путь к
скрипт (путь обычно, но не всегда, является абсолютным).

Если файл содержит исходный код (как в примере выше), он будет обработан
препроцессор EPP. Это означает, что вы, например, можете использовать предопределенные макросы
(Такие, как ? МОДУЛЬ), а также включают такие директивы, как -include_lib Директивы.
Например, используйте

-include_lib ("ядро / включить / файл.hrl").

включить определения записей для записей, используемых файл: read_link_info / 1
функция. Вы также можете выбрать кодировку, включив сюда комментарий кодировки, но если
во второй строке есть допустимый комментарий кодировки, он имеет приоритет.

Перед запуском скрипт будет проверен на синтаксическую и семантическую корректность.
Если есть предупреждения (например, неиспользуемые переменные), они будут напечатаны и
скрипт все равно будет запущен. Если есть ошибки, они будут распечатаны и скрипт
не будет запущен, и его статус выхода будет 127.

И объявление модуля, и экспортное объявление главная / 1 функции
необязательный.

По умолчанию сценарий будет интерпретирован. Вы можете заставить его скомпилировать
включая следующую строку где-нибудь в файле сценария:

-режим (компилировать).

Выполнение интерпретируемого кода медленнее, чем скомпилированного. Если большая часть
выполнение происходит в интерпретируемом коде, возможно, стоит его скомпилировать, даже если
хотя сама компиляция займет некоторое время. Также возможно
поставка родной вместо компилировать, это скомпилирует скрипт с использованием собственного
флаг, опять же, в зависимости от характеристик эскрипта, это могло или не могло
стоит того.

Как упоминалось ранее, возможен сценарий, содержащий предварительно скомпилированные
луч код. В предварительно скомпилированном сценарии интерпретация заголовка сценария
точно так же, как в скрипте, содержащем исходный код. Это означает, что вы можете
делать луч исполняемый файл, добавив к файлу строки, начинающиеся с #!
и %%! упомянутый выше. В предварительно скомпилированном скрипте функция главная / 1 должен быть
экспортируется.

В качестве еще одного варианта можно иметь весь архив Erlang в
сценарий. В сценарии архива интерпретация заголовка сценария в точности соответствует
так же, как в сценарии, содержащем исходный код. Это означает, что вы можете сделать архив
исполняемый файл, добавив к файлу строки, начинающиеся с #! и %%!
упомянутый выше. В сценарии архива функция главная / 1 должны быть экспортированы. К
по умолчанию главная / 1 функции в модуле с тем же именем, что и базовое имя
секретный кодекс файл будет вызван. Это поведение можно изменить, установив флаг
-эсскрипт main Модули как один из флагов эмулятора. В Модули должно быть имя
модуль с экспортированным главная / 1 функция. Видеть код(3 эрл) чтобы получить больше информации
про архивы и загрузку кода.

Во многих случаях очень удобно иметь заголовок в эскрипте, особенно на
Платформы Unix. Но заголовок на самом деле не обязателен. Это означает, что вы напрямую
может "выполнить" модуль Erlang, файл луча или файл архива без добавления заголовка
им. Но тогда вам нужно вызвать скрипт следующим образом:

$ эскрипт факториал.erl 5
факториал 5 = 120
$ esscript factorial.beam 5
факториал 5 = 120
$ esscript factorial.zip 5
факториал 5 = 120

escript: создать (FileOrBin, Разделы) -> ok | {ОК, двоичный ()} | {ошибка, срок()}

Типы:

FileOrBin = имя файла () | 'двоичный'
Разделы = [Заголовок] Тело | Тело
Заголовок = shebang | {shebang, Shebang} | комментарий | {комментарий, комментарий} |
{emu_args, эмуарги}
Shebang = строка () | 'по умолчанию' | 'неопределенный'
Комментарий = строка () | 'по умолчанию' | 'неопределенный'
EmuArgs = строка () | 'неопределенный'
Body = {source, SourceCode} | {beam, BeamCode} | {архив, ZipArchive} |
{архив, ZipFiles, ZipOptions}
SourceCode = BeamCode = файл: filename () | двоичный ()
ZipАрхив = zip: имя файла () | двоичный ()
ZipFiles = [ZipFile]
ZipFile = файл: имя_файла () | {файл: имя_файла (), двоичный ()} | {файл: имя_файла (),
binary (), файл: file_info ()}
Параметры Zip = [zip: create_option ()]

The создать / 2 функция создает скрипт из списка разделов. Разделы могут
давать в любом порядке. Эскрипт начинается с необязательного заголовок следует
обязательный Тело. Если заголовок присутствует, он всегда начинается с притон,
возможно, за которым последует комментарий и emu_args, притон по умолчанию "/ usr / bin / env
escript ". Комментарий по умолчанию "Это is an - * - эрланг - * - файл". Созданный
escript может быть либо возвращен как двоичный, либо записан в файл.

В качестве примера того, как можно использовать функцию, мы создаем интерпретируемый эскрипт
который использует emu_args установить какой-нибудь флаг эмулятора. В этом случае происходит отключение
smp_support. Мы также извлекаем различные разделы из вновь созданных
сценарий:

> Source = "%% Demo \ nmain (_Args) -> \ n io: format (erlang: system_info (smp_support)). \ N".
"%% Demo \ nmain (_Args) -> \ n io: format (erlang: system_info (smp_support)). \ N"
> io: format ("~ s \ n", [Источник]).
%% Демо
основной (_Args) ->
io: формат (erlang: system_info (smp_support)).

ok
> {ok, Bin} = escript: create (двоичный, [shebang, comment, {emu_args, "-smp disable"}, {source, list_to_binary (Source)}]).
{ок, << "#!/ usr / bin / env escript \ n %% Это - * - erlang - * - файл \ n %%! - smp disabl "... >>}
> файл: write_file ("demo.escript", Bin).
ok
> os: cmd ("escript demo.escript").
"ложный"
> escript: extract ("demo.escript", []).
{ok, [{shebang, default}, {comment, default}, {emu_args, "- smp disable"},
{источник, << "%% Demo \ nmain (_Args) -> \ n io: format (erlang: system_info (smp_su" ... >>}]}

Эскрипт без заголовка можно создать так:

> файл: write_file ("demo.erl", ["%% demo.erl \ n-module (demo). \ n-export ([main / 1]). \ n \ n", Источник]).
ok
> {ok, _, BeamCode} = compile: file ("demo.erl", [двоичный, debug_info]).
{хорошо, демо,
<< 70,79,82,49,0,0,2,208,66,69,65,77,65,116,111,109,0,0,0,
79,0,0,0,9,4,100, ... >>}
> escript: create ("demo.beam", [{beam, BeamCode}]).
ok
> escript: extract ("demo.beam", []).
{хорошо, [{shebang, undefined}, {comment, undefined}, {emu_args, undefined},
{балка, << 70,79,82,49,0,0,3,68,66,69,65,77,65,116,
111,109,0,0,0,83,0,0,0,9, ... >>}]}
> os: cmd ("escript demo.beam").
"True"

Здесь мы создаем архивный скрипт, содержащий как код Erlang, так и код луча.
Затем мы перебираем все файлы в архиве и собираем их содержимое и некоторые
информация о них.

> {ok, SourceCode} = файл: read_file ("demo.erl").
{ok, << "%% demo.erl \ n-module (demo). \ n-export ([main / 1]). \ n \ n %% Demo \ nmain (_Arg" ... >>}
> escript: create ("demo.escript", [shebang, {архив, [{"demo.erl", SourceCode}, {"demo.beam", BeamCode}], []}]).
ok
> {ок, [{shebang, default}, {comment, undefined}, {emu_args, undefined}, {archive, ArchiveBin}]} = escript: extract ("demo.escript", []).
{хорошо, [{shebang, default}, {comment, undefined}, {emu_args, undefined},
{{архив, << 80,75,3,4,20,0,0,0,8,0,118,7,98,60,105,
152,61,93,107,0,0,0,118,0, ... >>}]}
> файл: write_file ("demo.zip", ArchiveBin).
ok
> zip: foldl (fun (N, I, B, A) -> [{N, I (), B ()} | A] end, [], "demo.zip").
{хорошо, [{"demo.beam",
{file_info, 748, обычный, read_write,
{{2010,3,2}, {0,59,22}},
{{2010,3,2}, {0,59,22}},
{{2010,3,2}, {0,59,22}},
54,1,0,0,0,0,0},
<< 70,79,82,49,0,0,2,228,66,69,65,77,65,116,111,109,0,0,0,
83,0,0, ... >>},
{"demo.erl",
{file_info, 118, обычный, read_write,
{{2010,3,2}, {0,59,22}},
{{2010,3,2}, {0,59,22}},
{{2010,3,2}, {0,59,22}},
54,1,0,0,0,0,0},
<< "%% demo.erl \ n-module (demo). \ n-export ([main / 1]). \ n \ n %% Demo \ nmain (_Arg" ... >>}]}

escript: extract (Файл, Параметры) -> {ОК, Разделы} | {ошибка, срок()}

Типы:

Файл = имя файла ()
Параметры = [] | [compile_source]
Разделы = Тело заголовков
Заголовки = {shebang, Shebang} {comment, Comment} {emu_args, EmuArgs}
Shebang = строка () | 'по умолчанию' | 'неопределенный'
Комментарий = строка () | 'по умолчанию' | 'неопределенный'
EmuArgs = строка () | 'неопределенный'
Body = {source, SourceCode} | {источник, BeamCode} | {beam, BeamCode} | {архив,
Zip-архив}
SourceCode = BeamCode = ZipArchive = двоичный ()

The экстракт / 2 функция анализирует эскрипт и извлекает его разделы. Это
обратная сторона создать / 2.

Все разделы возвращаются, даже если их нет в эскрипте. Если конкретный
раздел имеет то же значение, что и значение по умолчанию, извлеченное значение
установить на атом по умолчанию. Если раздел отсутствует, извлеченное значение устанавливается на
атом не определено.

The compile_source опция влияет на результат только в том случае, если эскрипт содержит источник
код. В этом случае код Erlang автоматически компилируется и {источник, код луча}
возвращается вместо {источник, Исходный код}.

> escript: create ("demo.escript", [shebang, {архив, [{"demo.erl", SourceCode}, {"demo.beam", BeamCode}], []}]).
ok
> {ок, [{shebang, default}, {comment, undefined}, {emu_args, undefined}, {archive, ArchiveBin}]} = escript: extract ("demo.escript", []).
{хорошо, [{{архив, << 80,75,3,4,20,0,0,0,8,0,118,7,98,60,105,
152,61,93,107,0,0,0,118,0, ... >>}
{emu_args, undefined}]}

escript: имя_сценария () -> Файл

Типы:

Файл = имя файла ()

The имя_сценария / 0 функция возвращает имя исполняемого скрипта. Если
функция вызывается вне контекста эскрипта, поведение не определено.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ПРИНЯТО BY ЗАПИСАТЬСЯ


-с:
Скомпилируйте эскрипт независимо от значения атрибута режима.

-d:
Отладить скрипт. Запускает отладчик, загружает модуль, содержащий главная / 1
в отладчик, устанавливает точку останова в главная / 1 и призывает главная / 1, Если
модуль предварительно скомпилирован, он должен быть явно скомпилирован с отладочная_информация опцию.

-я:
Интерпретируйте эскрипт независимо от значения атрибута режима.

-с:
Выполняйте только синтаксическую и семантическую проверку файла сценария. Предупреждения и ошибки
(если есть) записываются на стандартный вывод, но скрипт запускаться не будет. Выход
status будет 0, если ошибок не было, и 127 в противном случае.

-н:
Скомпилируйте скрипт, используя собственный флаг +.

Используйте escript онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad




×
Реклама
❤️Совершайте покупки, бронируйте или заказывайте здесь — никаких затрат, что помогает поддерживать бесплатность услуг.