많은 프로그램이 다음과 같은 명령을 사용하여 버전 번호를 반환합니다.
$ 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