Как получить номер версии выпуска 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, и именно так начался этот вопрос.



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

723   11  

11 ответов:

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

остальные варианты ответов отображаются только основные версии, как ОТП 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).


enter image description here

erl +V или вы можете использовать erl-версия

результат: Erlang (SMP,ASYNC_THREADS) (BEAM) эмулятор версии 5.8.5

найти /usr/lib/erlang/releases/18/OTP_VERSION

находит 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) - Это оболочка версия

простая команда, которую вы можете использовать:

erl --version

Если у вас арматура установить этого:

$ rebar3 --version

результат: rebar 3.6.1 on Erlang/OTP 21 Erts 10.0.5

Comments

    Ничего не найдено.