Muchos programas devuelven su número de versión con un comando como:
$ program --version
program (platform info) v1.2.3
Esto es útil para programar la instalación o el mantenimiento del programa, y alguna otra magia de automatización controlada de los administradores del sistema y amigos.
Problema
¿Cómo obtener fácilmente el número de versión de Erlang (OTP) ?
En la red
Aquí hay algunas soluciones insatisfactorias ([1] y otros tutoriales / documentación de Erlang):
Emulador
$ erl
1> erlang:system_info(otp_release).
"R13B03"
Difícil de escribir. No he encontrado una manera de erl
ejecutar un solo comando desde un indicador de shell.
Archivo de lanzamiento
$ 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}].
Analizando el paraíso (con concha).
Una alternativa también podría ser verificar la ruta de instalación, pero eso no es portátil (mi ruta de instalación no incluye la versión, por ejemplo).
Contexto personal: estoy escribiendo un script para instalar la misma versión de RabbitMQ con complementos en varias máquinas. Algunos complementos tienen requisitos mínimos en la versión OTP, y así es como comenzó esta pregunta.
Respuestas:
fuente
(no error logger present) error: "Error in process <0.0.0>
en Windows 7 para mí. -17.0.2
), no el propio erlang (18
, en mi caso).erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
Las otras respuestas solo muestran la versión principal a partir de OTP 17 (de documentos para erlang: system_info ). Esto funciona para mostrar la versión mayor y menor en mi máquina de desarrollo:
Esto se lee en el archivo apropiado, como se describe en los documentos .
fuente
\n
también hacer el código más corto con sólo un cambio: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
(Estoy agregando esta respuesta aquí ya que lo he buscado al menos 3 veces en los últimos tres meses)
A partir de la versión 17.0, las versiones tienen un nuevo formato en su número de versión (17.0, 17.1, ...) pero
erlang:system_info(otp_release).
solo devuelve el número de versión principal.Para obtener el número de versión completo, es necesario verificar el contenido del
OTP_RELEASE
archivo en lareleases
carpeta ya mencionada .EDITAR
fuente
find / -name "OTP_RELEASE"
tampoco lo veo, pero tengo OTP 17.x instalado. ¿Cómo puedo saber qué es "x"?OTP_VERSION
.cat $(dirname $(dirname `which erl`)/$(readlink `which erl`))/../releases/*/OTP_*
init docs , vinculado por 'man erl'.
Así,
fuente
eval
palabra clave en el manual?Para recuperar la versión de EShell (Erlang Shell), puede usar:
y para recuperar la versión de Erlang OTP ( Open Telecom Platform ):
fuente
Encontrar en
/usr/lib/erlang/releases/18/OTP_VERSION
fuente
18.2.1
./usr/lib/erlang/releases
- instalado a través de ansibleerl + V o puede usar erl -version
resultado: Emulador Erlang (SMP, ASYNC_THREADS) (BEAM) versión 5.8.5
fuente
erl
versión del emulador, no el número de versión de lanzamiento de Erlang (por ejemplo, "R15B03"). Todo eso podría ser tan fácil ;-)Encuentra el erl en su RUTA y lee el archivo RELEASES para extraer el número de versión de erlang.
fuente
Abra la terminal e ingrese el comando erl
Obtendrá el siguiente resultado:
Erlang R16B03 (erts-5.10.4) [fuente] [64 bits] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] Eshell V5.10.4 (abortar con ^ G)
Erlang R16B03 (erts-5.10.4) [fuente] [64-bit] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] - Esta es la versión del idioma
Eshell V5.10.4 (abortar con ^ G) : esta es la versión de shell
fuente
Basado en la respuesta de Jay anterior, escribí la siguiente función de shell que puedo usar:
A menudo olvido que el comando es en
erl
lugar deerlang
, por lo que esto permite que mi cerebro olvidadizo lo useerlang
como si lo fueraerl
, yerlang -v
como esperaría de algo asíelixir
.fuente
Un comando simple que puedes usar:
fuente