De nombreux programmes renvoient leur numéro de version avec une commande comme:
$ program --version
program (platform info) v1.2.3
Ceci est utile pour créer des scripts pour l'installation ou la maintenance du programme, et pour une autre magie d'automatisation contrôlée par les administrateurs système et amis.
Problème
Comment obtenir facilement le numéro de version d'Erlang (OTP) ?
Sur le net
Voici quelques solutions insatisfaisantes ([1] et autres tutoriels / documentation Erlang):
Émulateur
$ erl
1> erlang:system_info(otp_release).
"R13B03"
Difficile à scénariser. Je n'ai pas trouvé de moyen d' erl
exécuter une seule commande à partir d'une invite du shell.
Dossier de sortie
$ 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}].
Parsing paradise (avec shell).
Une alternative pourrait également être de vérifier le chemin d'installation, mais ce n'est pas portable (mon chemin d'installation n'inclut pas la version, par exemple).
Contexte personnel: j'écris un script pour installer la même version de RabbitMQ avec des plugins sur plusieurs machines. Certains plugins ont des exigences minimales sur la version OTP, et c'est ainsi que cette question a commencé.
Réponses:
la source
(no error logger present) error: "Error in process <0.0.0>
sur Windows 7 pour moi. -17.0.2
), pas erlang lui-même (18
, dans mon cas).erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
Les autres réponses affichent uniquement la version majeure à partir d'OTP 17 (à partir de la documentation pour erlang: system_info ). Cela fonctionne pour afficher la version majeure et mineure sur ma machine de développement:
Cela lit le fichier approprié, comme décrit dans la documentation .
la source
\n
ainsi rendre le code plus court avec un seul changement: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
.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
(J'ajoute cette réponse ici car je l'ai recherchée au moins 3 fois au cours des trois derniers mois)
À partir de la version 17.0, les versions ont un nouveau format dans leur numéro de version (17.0, 17.1, ...) mais
erlang:system_info(otp_release).
ne renvoie que le numéro de version majeur.Afin d'obtenir le numéro de version complet, il est nécessaire de vérifier le contenu du
OTP_RELEASE
fichier sous lereleases
dossier déjà mentionné .ÉDITER
la source
find / -name "OTP_RELEASE"
je ne le vois pas non plus, mais j'ai OTP 17.x installé. Comment puis-je savoir ce qu'est "x"?OTP_VERSION
.cat $(dirname $(dirname `which erl`)/$(readlink `which erl`))/../releases/*/OTP_*
init docs , lié par «man erl».
Donc,
la source
eval
mot - clé dans le manuel?Pour récupérer la version EShell (Erlang Shell), vous pouvez utiliser:
et pour récupérer la version Erlang OTP ( Open Telecom Platform ):
la source
Retrouver dans
/usr/lib/erlang/releases/18/OTP_VERSION
la source
18.2.1
./usr/lib/erlang/releases
- installé via ansibleerl + V ou vous pouvez utiliser erl -version
résultat: émulateur Erlang (SMP, ASYNC_THREADS) (BEAM) version 5.8.5
la source
erl
version de l' émulateur, pas le numéro de version de la version Erlang (par exemple "R15B03"). Tout cela pourrait être si simple ;-)Recherche l'ERL dans votre PATH et lit le fichier RELEASES pour extraire le numéro de version d'erlang.
la source
Ouvrez le terminal et entrez la commande erl
Vous obtiendrez la sortie suivante:
Erlang R16B03 (erts-5.10.4) [source] [64 bits] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] Eshell V5.10.4 (abandonner avec ^ G)
Erlang R16B03 (erts-5.10.4) [source] [64 bits] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] - Ceci est la version linguistique
Eshell V5.10.4 (abandonner avec ^ G) - Ceci est la version shell
la source
Sur la base de la réponse de Jay ci-dessus, j'ai écrit la fonction shell suivante que je peux utiliser:
J'oublie souvent que la commande est
erl
plutôt queerlang
, donc cela permet à mon cerveau oublieux de l'utilisererlang
comme si c'était le caserl
, eterlang -v
comme je m'attendrais à quelque chose commeelixir
.la source
Une commande simple que vous pouvez utiliser:
la source