[shell] 쉘에서 Erlang의 릴리스 버전 번호를 얻는 방법은 무엇입니까?

많은 프로그램이 다음과 같은 명령을 사용하여 버전 번호를 반환합니다.

$ program --version
program (platform info) v1.2.3

이것은 프로그램의 설치 또는 유지 관리를 스크립팅하는 데 유용하며 시스템 관리자와 친구들이 제어하는 ​​다른 자동화 마법을 사용합니다.

문제

Erlang (OTP)의 버전 번호를 쉽게 얻는 방법은 무엇입니까?

인터넷에서

다음은 불만족스러운 솔루션 ([1] 및 기타 자습서 / Erlang 문서)입니다.

에뮬레이터

$ erl
1> erlang:system_info(otp_release).
"R13B03"

스크립트하기 어렵습니다. erl쉘 프롬프트에서 단일 명령을 실행 하는 방법을 찾지 못했습니다 .

릴리스 파일

$ cat /usr/lib/erlang/releases/RELEASES
[{release,"OTP  APN 181 01","R13B03","5.7.4",
      [{kernel,"2.13.4","/usr/lib/erlang/lib/kernel-2.13.4"},
       {stdlib,"1.16.4","/usr/lib/erlang/lib/stdlib-1.16.4"},
       {sasl,"2.1.8","/usr/lib/erlang/lib/sasl-2.1.8"}],
      permanent}].

파싱 ​​파라다이스 (쉘 포함).

대안은 설치 경로를 확인하는 것일 수도 있지만 이식 가능하지 않습니다 (내 설치 경로에 버전이 포함되어 있지 않음).

개인 컨텍스트 : 여러 컴퓨터에 플러그인을 사용하여 동일한 버전의 RabbitMQ를 설치하는 스크립트를 작성 중입니다. 일부 플러그인은 OTP 버전에 대한 최소 요구 사항이 있으며 이것이이 질문이 시작된 방법입니다.

[1] http://forum.trapexit.org/viewtopic.php?p=42946



답변

 erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().'  -noshell


답변

다른 답변은 OTP 17의 주요 버전 만 표시합니다 ( erlang : system_info에 대한 문서에서 ). 이것은 내 개발 컴퓨터에 주 버전과 부 버전을 표시하는 데 작동합니다.

erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell

문서에 설명 된대로 적절한 파일에서 읽습니다 .


답변

(지난 3 개월 동안 3 번 이상 검색 했으므로 여기에이 답변을 추가합니다.)

버전 17.0 릴리스부터는 버전 번호 (17.0, 17.1, …)에 새 형식이 있지만 erlang:system_info(otp_release).주 버전 번호 만 반환합니다.

전체 버전 번호를 얻으려면 OTP_RELEASE이미 언급 한 releases폴더 아래의 파일 내용을 확인해야 합니다.

$ which erl
/usr/bin/erl
$ cd /usr/bin
$ ls -l erl
../lib/erlang/bin/erl
$ cd ../lib/erlang/
$ cat releases/17/OTP_RELEASE
17.3

편집하다

# Some versions seem to have OTP_VERSION instead of OTP_RELEASE
$ cat releases/17/OTP_VERSION
17.4


답변

init docs , ‘man erl’로 링크 됨.

-eval Expr

시스템 초기화 중에 임의의 표현식 Expr을 스캔, 구문 분석 및 평가합니다. 이러한 단계 중 하나라도 실패하면 (구문 오류, 구문 분석 오류 또는 평가 중 예외) Erlang은 오류 메시지와 함께 중지됩니다. 다음은 난수 생성기를 시드하는 예입니다.

% erl -eval '{X,Y,Z} = now(), random:seed(X,Y,Z).'

이 예에서는 Erlang을 16 진수 계산기로 사용합니다.

% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])'  -s erlang halt
BF

-eval 표현식이 여러 개 지정되면 지정된 순서대로 순차적으로 평가됩니다. -eval 표현식은 -s 및 -run 함수 호출을 사용하여 순차적으로 평가됩니다 (지정된 순서대로). -s 및 -run과 마찬가지로 종료되지 않는 평가는 시스템 초기화 프로세스를 차단합니다.

그러므로,

$ erl -noshell -eval 'io:fwrite("~s\n", [erlang:system_info(otp_release)]).' -s erlang halt


답변

EShell (Erlang Shell) 버전을 검색하려면 다음을 사용할 수 있습니다.

erlang:system_info(version).

Erlang OTP ( Open Telecom Platform ) 버전 을 검색하려면 :

erlang:system_info(otp_release).

여기에 이미지 설명 입력


답변

찾기 /usr/lib/erlang/releases/18/OTP_VERSION


답변

erl + V 또는 erl -version을 사용할 수 있습니다.

결과 : Erlang (SMP, ASYNC_THREADS) (BEAM) 에뮬레이터 버전 5.8.5