GoGPT Best VPN GoSearch

온웍스 파비콘

escript - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 공급자에서 escript 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 명령 escript입니다.

프로그램:

이름


escript - Erlang 스크립팅 지원

기술


서적 짧은 Erlang 프로그램을 컴파일하지 않고도 실행할 수 있도록 지원합니다.
먼저 명령줄 인수를 검색하는 쉬운 방법입니다.

수출


스크립트 이름 스크립트 인수1 스크립트-arg2...
서적 escript-플래그 스크립트 이름 스크립트 인수1 스크립트-arg2...

서적 Erlang으로 작성된 스크립트를 실행합니다.

다음은 예입니다.

$ chmod u+x 계승
$ 고양이 계승
#!/usr/빈/환경 서적
%% -*- 얼랭 -*-
%%! -smp 활성화 -sname factorial -mnesia debug verbose
메인([문자열]) ->
시도
N = list_to_integer(문자열),
F = fac(N),
io:format("팩토리얼 ~w = ~w\n", [N,F])
따라
_:_ ->
용법()
끝;
메인(_) ->
용법().

사용법() ->
io:format("사용법: 계승 정수\n"),
정지(1).

유니(0) -> 1;
fac(N) -> N * fac(N-1).
$ ./팩토리얼 5
계승 5 = 120
$ ./팩토리얼
사용법: 계승 정수
$ ./팩토리얼 XNUMX
사용법: 계승 정수

예제에서 Erlang 스크립트의 헤더는 일반 Erlang 모듈과 다릅니다.
첫 번째 라인은 인터프리터 라인을 위한 것입니다. 서적.
그러나 다음을 호출하면 서적 이 같은

$ escript 팩토리얼 5

첫 번째 줄의 내용은 중요하지 않지만 Erlang 코드를 포함할 수 없습니다.
무시됩니다.

예제의 두 번째 줄에는 이맥스 편집자
이는 Erlang 소스 파일을 편집하기 위한 주 모드로 들어가게 합니다. 만약
지시문이 있으면 두 번째 줄에 있어야 합니다.

댓글을 선택하는 경우 부호화 두 번째 줄에 위치할 수 있습니다.

참고 :
위에서 언급한 주석에서 지정한 인코딩은 스크립트 자체에 적용됩니다.
그러나 I/O 서버의 인코딩은 다음과 같이 명시적으로 설정해야 합니다.

io:setopts([{인코딩, 유니코드}])

I/O 서버의 기본 인코딩 표준_io is 라틴 1 스크립트 이후
비대화형 터미널에서 실행됩니다(참조 사용 유니 코드 in 얼랑).

세 번째 줄(또는 Emacs의 존재 여부에 따라 두 번째 줄)
지시문) 에뮬레이터에 다음과 같은 인수를 제공할 수 있습니다.

%%! -smp 활성화 -sname factorial -mnesia debug verbose

이러한 인수 행은 다음으로 시작해야 합니다. %%! 나머지 줄은 해석됩니다.
에뮬레이터에 대한 인수로.

의 위치를 ​​알고 있다면 서적 실행 가능, 첫 번째 줄은 직접
경로를 제공 서적. 예를 들어 :

#!/usr/local/bin/escript

다른 종류의 스크립트와 마찬가지로 Erlang 스크립트는 Unix 플랫폼에서 작동하지 않습니다.
스크립트 파일의 실행 비트가 설정되지 않았습니다. (사용 chmod를 +x 스크립트 이름 켜는 법
실행 비트.)

나머지 Erlang 스크립트 파일은 Erlang을 포함할 수 있습니다. 암호,
인라인 파일 또는 인라인 아카이브 파일.

Erlang 스크립트 파일은 항상 다음 함수를 포함해야 합니다. 메인/1. 스크립트가
실행, 메인/1 함수는 다음을 나타내는 문자열 목록과 함께 호출됩니다.
스크립트에 주어진 인수(어떤 식으로든 변경되거나 해석되지 않음).

경우 메인/1 스크립트의 함수가 성공적으로 반환되고 종료 상태가
스크립트는 0이 됩니다. 실행 중 예외가 발생하면 짧은 메시지가
출력되고 스크립트는 종료 상태 127로 종료됩니다.

XNUMX이 아닌 종료 코드를 반환하려면 다음을 호출하십시오. 정지(종료코드); 예를 들어:

정지(1).

상담 예약 번호 escript:스크립트_이름() to 스크립트에서 다음의 경로 이름을 검색합니다.
스크립트(경로 이름은 항상 그런 것은 아니지만 일반적으로 절대 경로입니다).

파일에 소스 코드가 포함되어 있으면(위의 예에서와 같이)
전처리기 . 이는 예를 들어 미리 정의된 매크로를 사용할 수 있음을 의미합니다.
(예 : ?기준 치수) 뿐만 아니라 다음과 같은 지시어를 포함합니다. -include_lib 지침.
예를 들어

-include_lib("커널/포함/file.hrl").

에서 사용하는 레코드에 대한 레코드 정의를 포함하려면 파일:read_link_info/1
기능. 여기에 인코딩 주석을 포함하여 인코딩을 선택할 수도 있지만
우선권을 갖는 두 번째 줄에 유효한 인코딩 주석이 있습니다.

스크립트는 실행되기 전에 구문 및 의미의 정확성을 확인합니다.
경고(예: 사용되지 않은 변수)가 있는 경우 경고가 인쇄되고
스크립트는 계속 실행됩니다. 오류가 있으면 인쇄되고 스크립트가
실행되지 않으며 종료 상태는 127입니다.

모듈 선언과 내보내기 선언 모두 메인/1 기능은
선택 과목.

기본적으로 스크립트는 해석됩니다. 강제로 컴파일되도록 할 수 있습니다.
스크립트 파일 어딘가에 다음 줄을 포함합니다.

-모드(컴파일).

해석된 코드의 실행은 컴파일된 코드보다 느립니다. 많은 경우
실행은 해석된 코드에서 발생하므로 컴파일하는 것이 좋습니다.
컴파일 자체는 시간이 조금 걸립니다. 또한 가능하다
공급 출신 대신 편집하다, 네이티브를 사용하여 스크립트를 컴파일합니다.
플래그, 다시 escript의 특성에 따라 이것이 가능하거나 불가능합니다.
가치가 있습니다.

앞서 언급했듯이 미리 컴파일된 스크립트를 포함하는 스크립트를 가질 수 있습니다.
암호. 미리 컴파일된 스크립트에서 스크립트 헤더의 해석은 다음과 같습니다.
소스 코드를 포함하는 스크립트에서와 정확히 동일합니다. 그것은 당신이 할 수 있다는 것을 의미합니다
~을 만들다 로 시작하는 줄을 파일 앞에 추가하여 실행 가능한 파일 #!
그리고 %%! 위에 언급했듯이. 미리 컴파일된 스크립트에서 함수 메인/1 해야합니다
내보냈습니다.

또 다른 옵션으로 전체 Erlang 아카이브를
스크립트. 아카이브 스크립트에서 스크립트 헤더의 해석은 정확히
소스 코드를 포함하는 스크립트에서와 동일합니다. 즉, 아카이브를 만들 수 있습니다.
로 시작하는 줄을 파일 앞에 추가하여 실행 가능한 파일 #! 그리고 %%!
위에 언급했듯이. 아카이브 스크립트에서 함수 메인/1 내보내야 합니다. 에 의해
기본 메인/1 기본 이름과 동일한 이름을 가진 모듈의 함수
서적 파일이 호출됩니다. 이 동작은 플래그를 설정하여 재정의할 수 있습니다.
-escript 본관 모듈 에뮬레이터 플래그 중 하나로. 그만큼 모듈 의 이름이어야 합니다.
내 보낸 모듈 메인/1 기능. 보다 암호(3erl) 자세한 내용은
아카이브 및 코드 로딩에 대해.

많은 경우 escript에 헤더가 있는 것이 매우 편리합니다.
유닉스 플랫폼. 그러나 헤더는 실제로 선택 사항입니다. 이것은 당신이 직접
헤더를 추가하지 않고 Erlang 모듈, 빔 파일 또는 아카이브 파일을 "실행"할 수 있습니다.
그들에게. 그러나 다음과 같이 스크립트를 호출해야 합니다.

$ escript 계승.erl 5
계승 5 = 120
$ escript 계승.빔 5
계승 5 = 120
$ escript 계승.zip 5
계승 5 = 120

escript:create(FileOrBin, 섹션) -> ok | {좋아요, 바이너리()} | {오류, 용어()}

유형 :

FileOrBin = 파일명() | '바이너리'
섹션 = [헤더] 본문 | 몸
헤더 = shebang | {세방, 세방} | 코멘트 | {댓글, 댓글} |
{emu_args, EmuArgs}
Shebang = string() | '기본값' | '한정되지 않은'
주석 = 문자열() | '기본값' | '한정되지 않은'
EmuArgs = 문자열() | '한정되지 않은'
본문 = {소스, SourceCode} | {빔, 빔코드} | {아카이브, ZipArchive} |
{아카이브, ZipFiles, ZipOptions}
SourceCode = BeamCode = 파일:파일명() | 바이너리()
집 아카이브 = zip:파일명() | 바이너리()
ZipFiles = [집파일]
ZipFile = 파일:파일명() | {파일:파일명(), 바이너리()} | {파일:파일 이름(),
바이너리(), 파일:file_info()}
우편 옵션 = [zip:create_option()]

The 생성/2 함수는 섹션 목록에서 escript를 생성합니다. 섹션은
어떤 순서로든 주어집니다. escript는 선택 사항으로 시작합니다. 헤더 다음
필수 신체. 헤더가 있으면 항상 다음으로 시작합니다. 오두막,
아마도 다음에 본문 그리고 emu_args. 그만큼 오두막 기본값은 "/usr/빈/환경
스크립트". 주석은 기본적으로 "이 is an - * - 얼랭 - * - 파일". 생성된
escript는 바이너리로 반환되거나 파일에 기록될 수 있습니다.

함수를 어떻게 사용할 수 있는지에 대한 예로 해석된 escript를 생성합니다.
사용하는 emu_args 일부 에뮬레이터 플래그를 설정합니다. 이 경우 비활성화됩니다.
smp_support. 또한 새로 생성된 섹션에서 다른 섹션을 추출합니다.
스크립트:

> 소스 = "%% Demo\nmain(_Args) ->\n io:format(erlang:system_info(smp_support)).\n".
"%% 데모\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(binary, [shebang, comment, {emu_args, "-smp disable"}, {source, list_to_binary(Source)}]).
{좋아,<<"#!/usr/빈/환경 escript\n%% 이것은 -*- erlang -*- 파일입니다\n%%!-smp disable"...>>}
> 파일:write_file("demo.escript", Bin).
ok
> os:cmd("escript 데모.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"...>>}]}

헤더가 없는 escript는 다음과 같이 생성할 수 있습니다.

> file:write_file("demo.erl", ["%% demo.erl\n-module(demo).\n-export([main/1]).\n\n", 소스]).
ok
> {ok, _, BeamCode} = 컴파일:파일("demo.erl", [binary, 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,정의되지 않음}, {설명,정의되지 않음}, {emu_args,정의되지 않음},
{빔,<<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").
"진실"

여기서 우리는 Erlang 코드와 빔 코드를 모두 포함하는 아카이브 스크립트를 생성합니다.
그런 다음 아카이브의 모든 파일을 반복하고 해당 내용과 일부를 수집합니다.
그들에 대한 정보.

> {ok, SourceCode} = file:read_file("demo.erl").
{ok,<<"%% demo.erl\n-module(demo).\n-export([main/1]).\n\n%% Demo\nmain(_Arg"...>>}
> escript:create("demo.escript", [shebang, {archive, [{"demo.erl", SourceCode}, {"demo.beam", BeamCode}], []}]).
ok
> {ok, [{shebang,default}, {comment,undefined}, {emu_args,undefined}, {archive, ArchiveBin}]} = escript:extract("demo.escript", []).
{ok,[{shebang,default}, {설명, 정의되지 않음}, {emu_args, 정의되지 않음},
{{아카이브,<<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] 끝, [], "demo.zip").
{ok,[{"demo.beam",
{file_info,748,일반,읽기_쓰기,
{{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,...>>},
{"데모.erl",
{file_info,118,일반,읽기_쓰기,
{{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(파일, 옵션) -> {좋아요, 섹션} | {오류, 용어()}

유형 :

파일 = 파일명()
옵션 = [] | [컴파일_소스]
섹션 = 헤더 본문
헤더 = {shebang, Shebang} {comment, comment} {emu_args, EmuArgs}
Shebang = string() | '기본값' | '한정되지 않은'
주석 = 문자열() | '기본값' | '한정되지 않은'
EmuArgs = 문자열() | '한정되지 않은'
본문 = {소스, SourceCode} | {출처, BeamCode} | {빔, 빔코드} | {보관소,
집 아카이브}
SourceCode = BeamCode = ZipArchive = 바이너리()

The 추출물/2 함수는 escript를 구문 분석하고 해당 섹션을 추출합니다. 이것이
의 반대 생성/2.

escript에 없는 경우에도 모든 섹션이 반환됩니다. 특정한 경우
섹션이 기본값과 동일한 값을 갖는 경우 추출된 값은
원자로 설정 디폴트 값. 섹션이 누락된 경우 추출된 값이
원자 정의되지 않은.

The 컴파일 소스 옵션은 escript에 다음이 포함된 경우에만 결과에 영향을 미칩니다.
암호. 이 경우 Erlang 코드는 자동으로 컴파일되고 {원천, 빔코드}
대신 반환됩니다 {원천, 소스 코드}.

> escript:create("demo.escript", [shebang, {archive, [{"demo.erl", SourceCode}, {"demo.beam", BeamCode}], []}]).
ok
> {ok, [{shebang,default}, {comment,undefined}, {emu_args,undefined}, {archive, ArchiveBin}]} = escript:extract("demo.escript", []).
{ok,[{{아카이브,<<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,정의되지 않음}]}

escript:스크립트_이름() -> 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에

유형 :

파일 = 파일명()

The 스크립트_이름/0 함수는 실행 중인 escript의 이름을 반환합니다. 만약
함수가 escript의 컨텍스트 외부에서 호출되면 동작이 정의되지 않습니다.

옵션 수용 BY 에스크립트


-씨:
mode 속성 값에 관계없이 escript를 컴파일합니다.

-디:
escript를 디버그합니다. 디버거를 시작하고 다음을 포함하는 모듈을 로드합니다. 메인/1
함수를 디버거에 입력하고 중단점을 설정합니다. 메인/1 및 호출 메인/1. 경우
모듈이 미리 컴파일되어 있으므로 다음과 같이 명시적으로 컴파일해야 합니다. 디버그 정보 옵션을 선택합니다.

-나는:
mode 속성의 값에 관계없이 escript를 해석하십시오.

-에스:
스크립트 파일의 구문 및 의미 검사만 수행하십시오. 경고 및 오류
(있는 경우) 표준 출력에 기록되지만 스크립트는 실행되지 않습니다. 출구
오류가 없으면 status는 0이고 그렇지 않으면 127입니다.

-N:
+native 플래그를 사용하여 escript를 컴파일합니다.

onworks.net 서비스를 사용하여 escript 온라인 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad




×
광고
❤️여기에서 쇼핑, 예약, 구매하세요. 비용이 들지 않아 서비스를 무료로 유지하는 데 도움이 됩니다.