Как получить номер версии выпуска Erlang из оболочки?
многие программы возвращают свой номер версии с помощью команды:
$ program --version
program (platform info) v1.2.3
это полезно для написания сценариев установки или обслуживания программы, а также некоторых других контролируемых магии автоматизации от системных администраторов и друзей.
как легко получить номер версии для Erlang (OTP)?
в сети
вот некоторые неудовлетворительные решения ([1] и другие учебники / Erlang документация):
эмулятор
$ erl
1> erlang:system_info(otp_release).
"R13B03"
жесткий сценарий. Я не нашел способ иметь erl выполните одну команду из командной строки.
Release file
$ 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, и именно так начался этот вопрос.
11 ответов:
остальные варианты ответов отображаются только основные версии, как ОТП 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 раза за последние три месяца)
начиная с версии 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
EDIT
# 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 используется как шестнадцатеричный калькулятор:
% 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 (Открытая Телекоммуникационная Платформа) версия:
erlang:system_info(otp_release).
erl +V или вы можете использовать erl-версия
результат: Erlang (SMP,ASYNC_THREADS) (BEAM) эмулятор версии 5.8.5
находит erl в вашем пути и читает файл релизов, чтобы извлечь номер релиза erlang.
awk -F, 'NR==1 {gsub(/"/,"",);print }' "$(dirname $(readlink -f $(which erl)))/../releases/RELEASES"
откройте терминал и введите команду erl
вы получите следующий результат:
Эрланг R16B03 (ЕРЦ-5.10.4) [источник] [64 бита] [СМП:4:4] [асинхронных потоков:10] [ядра-опрос:ложь] Eshell V5. 10. 4 (прервать с ^G)
Эрланг R16B03 (ЕРЦ-5.10.4) [источник] [64 бита] [СМП:4:4] [асинхронных потоков:10] [ядра-опрос:ложь] - это языковая версия
Eshell V5. 10. 4 (прервать с ^G) - Это оболочка версия
Если у вас арматура установить этого:
$ rebar3 --versionрезультат:
rebar 3.6.1 on Erlang/OTP 21 Erts 10.0.5

Comments