Viele Programme geben ihre Versionsnummer mit einem Befehl zurück wie:
$ program --version
program (platform info) v1.2.3
Dies ist nützlich, um Skripte für die Installation oder Wartung des Programms und einige andere kontrollierte Automatisierungszauber von Systemadministratoren und Freunden zu erstellen.
Problem
Wie erhalte ich einfach die Versionsnummer für Erlang (OTP) ?
Im Netz
Hier sind einige unbefriedigende Lösungen ([1] und andere Tutorials / Erlang-Dokumentation):
Emulator
$ erl
1> erlang:system_info(otp_release).
"R13B03"
Schwer zu schreiben. Ich habe keine Möglichkeit gefunden erl
, einen einzelnen Befehl über eine Shell-Eingabeaufforderung auszuführen.
Datei freigeben
$ 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-Paradies (mit Shell).
Eine Alternative könnte auch darin bestehen, den Installationspfad zu überprüfen, der jedoch nicht portierbar ist (mein Installationspfad enthält zum einen nicht die Version).
Persönlicher Kontext: Ich schreibe ein Skript, um dieselbe Version von RabbitMQ mit Plugins auf mehreren Computern zu installieren. Einige Plugins stellen nur minimale Anforderungen an die OTP-Version, und so begann diese Frage.
Antworten:
quelle
(no error logger present) error: "Error in process <0.0.0>
unter Windows 7 für mich. -17.0.2
), nicht erlang selbst (18
in meinem Fall).erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
Die anderen Antworten zeigen nur die Hauptversion ab OTP 17 (aus den Dokumenten für erlang: system_info ). Dies funktioniert, um die Haupt- und Nebenversion auf meinem Entwicklungscomputer anzuzeigen:
Dies liest aus der entsprechenden Datei, wie in den Dokumenten beschrieben .
quelle
\n
den Code mit nur einer Änderung verkürzen :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
(Ich füge diese Antwort hier hinzu, da ich in den letzten drei Monaten mindestens dreimal danach gesucht habe.)
Ab Version 17.0 haben Versionen ein neues Format in ihrer Versionsnummer (17.0, 17.1, ...), geben jedoch
erlang:system_info(otp_release).
nur die Hauptversionsnummer zurück.Um die vollständige Versionsnummer zu erhalten, muss der Inhalt der
OTP_RELEASE
Datei unter dem bereits erwähntenreleases
Ordner überprüft werden .BEARBEITEN
quelle
find / -name "OTP_RELEASE"
sehe sie auch nicht, aber ich habe OTP 17.x installiert. Wie kann ich wissen, was "x" ist?OTP_VERSION
.cat $(dirname $(dirname `which erl`)/$(readlink `which erl`))/../releases/*/OTP_*
init docs , verknüpft mit 'man erl'.
So,
quelle
eval
Schlüsselwort im Handbuch zu suchen ?Um die EShell-Version (Erlang Shell) abzurufen, können Sie Folgendes verwenden:
und um die Erlang OTP- Version ( Open Telecom Platform ) abzurufen :
quelle
Zu finden in
/usr/lib/erlang/releases/18/OTP_VERSION
quelle
18.2.1
./usr/lib/erlang/releases
- installiert über ansibleerl + V oder Sie können erl -version verwenden
Ergebnis: Emulator Erlang (SMP, ASYNC_THREADS) (BEAM) Version 5.8.5
quelle
erl
Emulatorversion zurück, nicht die Versionsnummer der Erlang-Version (z. B. "R15B03"). Das alles könnte so einfach sein ;-)Findet das Erl in Ihrem PATH und liest die RELEASES-Datei, um die erlang-Versionsnummer zu extrahieren.
quelle
Terminal öffnen und Befehl erl eingeben
Sie erhalten folgende Ausgabe:
Erlang R16B03 (erts-5.10.4) [Quelle] [64-Bit] [smp: 4: 4] [Async-Threads: 10] [Kernel-Umfrage: false] Eshell V5.10.4 (Abbruch mit ^ G)
Erlang R16B03 (erts-5.10.4) [Quelle] [64-Bit] [SMP: 4: 4] [Async-Threads: 10] [Kernel-Umfrage: Falsch] - Dies ist die Sprachversion
Eshell V5.10.4 (Abbruch mit ^ G) - Dies ist die Shell-Version
quelle
Basierend auf Jays Antwort oben habe ich die folgende Shell-Funktion geschrieben, die ich verwenden kann:
Ich vergesse oft, dass der Befehl
erl
eher als isterlang
, also kann mein vergessliches Gehirn so verwenden,erlang
als ob es so wäreerl
underlang -v
wie ich es von so etwas erwarten würdeelixir
.quelle
Ein einfacher Befehl, den Sie verwenden können:
quelle