쉘에서 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
If multiple -eval expressions are specified, they are evaluated sequentially in the order specified. -eval expressions are evaluated sequentially with -s and -run function calls (this also in the order specified). As with -s and -run, an evaluation that does not terminate, blocks the system initialization process.
Thus,
$ erl -noshell -eval 'io:fwrite("~s\n", [erlang:system_info(otp_release)]).' -s erlang halt
To retrieve EShell (Erlang Shell) version, you may use:
erlang:system_info(version).
and to retrieve Erlang OTP (Open Telecom Platform) version:
erlang:system_info(otp_release).
Find in /usr/lib/erlang/releases/18/OTP_VERSION
erl +V or you can use erl -version
result : Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 5.8.5
Finds the erl in your PATH and reads the RELEASES file to extract the erlang release number.
awk -F, 'NR==1 {gsub(/"/,"",$3);print $3}' "$(dirname $(readlink -f $(which erl)))/../releases/RELEASES"
Open terminal and enter command erl
You will get the following output:
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false] Eshell V5.10.4 (abort with ^G)
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false] - This is the language version
Eshell V5.10.4 (abort with ^G) - This is the shell version
Based on Jay's answer above, I wrote the following shell function that I can use:
erlang () {
if [[ $@ == "-v" ]]; then
command 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
else
command erl
fi
}
I often forget that the command is erl
rather than erlang
, so this lets my forgetful brain just use erlang
as if it were erl
, and erlang -v
like I would expect from something like elixir
.
If you have rebar installed do this:
$ rebar3 --version
result: rebar 3.6.1 on Erlang/OTP 21 Erts 10.0.5
A simple command you can use:
erl --version
참고URL : https://stackoverflow.com/questions/9560815/how-to-get-erlangs-release-version-number-from-a-shell
'programing' 카테고리의 다른 글
PHP 날짜를 포함하는 요소로 다차원 배열 정렬 (0) | 2020.08.17 |
---|---|
Spring Framework에서 종속성 주입 및 제어 반전이란 무엇입니까? (0) | 2020.08.17 |
OpenShift와 함께 기존 git repo를 사용할 수 있습니까? (0) | 2020.08.17 |
Gson을 사용하여 JSON 배열을 java.util.List로 구문 분석 (0) | 2020.08.17 |
가장 큰 값 해시의 키를 찾는 방법은 무엇입니까? (0) | 2020.08.17 |