Banyak program mengembalikan nomor versinya dengan perintah seperti:
$ program --version
program (platform info) v1.2.3
Ini berguna untuk membuat skrip instalasi atau pemeliharaan program, dan beberapa keajaiban otomasi terkontrol lainnya dari Admin Sistem & teman.
Masalah
Bagaimana cara mudah mendapatkan nomor versi Erlang (OTP) ?
Di internet
Berikut adalah beberapa solusi yang tidak memuaskan ([1] dan tutorial / dokumentasi Erlang lainnya):
Emulator
$ erl
1> erlang:system_info(otp_release).
"R13B03"
Sulit untuk ditulis. Saya belum menemukan cara untuk erl
menjalankan satu perintah dari prompt shell.
File rilis
$ 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}].
Surga parsing (dengan cangkang).
Alternatifnya juga dapat memeriksa jalur pemasangan, tetapi itu tidak portabel (jalur pemasangan saya tidak menyertakan versinya, untuk satu).
Konteks pribadi: Saya menulis skrip untuk menginstal versi RabbitMQ yang sama dengan plugin di beberapa mesin. Beberapa plugin memiliki persyaratan minimal pada versi OTP, dan begitulah pertanyaan ini dimulai.
Jawaban:
sumber
(no error logger present) error: "Error in process <0.0.0>
pada Windows 7 untuk saya. -17.0.2
), bukan erlang itu sendiri (18
, dalam kasus saya).erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
Jawaban lain hanya menampilkan versi utama pada OTP 17 (dari docs untuk erlang: system_info ). Ini berfungsi untuk menampilkan versi mayor dan minor di mesin pengembangan saya:
Ini membaca dari file yang sesuai, seperti yang dijelaskan di dokumen .
sumber
\n
dan juga membuat kode lebih pendek dengan hanya satu perubahan: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
(Saya menambahkan jawaban ini di sini karena saya telah mencari ini setidaknya 3 kali dalam tiga bulan terakhir)
Mulai dari rilis versi 17.0 memiliki format baru dalam nomor versinya (17.0, 17.1, ...) tetapi
erlang:system_info(otp_release).
hanya mengembalikan nomor versi mayor.Untuk mendapatkan nomor versi lengkap, Anda perlu memeriksa konten
OTP_RELEASE
file di bawahreleases
folder yang telah disebutkan .EDIT
sumber
find / -name "OTP_RELEASE"
juga tidak melihatnya, tetapi saya telah menginstal OTP 17.x. Bagaimana saya bisa tahu apa itu "x"?OTP_VERSION
.cat $(dirname $(dirname `which erl`)/$(readlink `which erl`))/../releases/*/OTP_*
dokumen init , ditautkan oleh 'man erl'.
Jadi,
sumber
eval
kata kunci di manual?Untuk mengambil versi EShell (Erlang Shell), Anda dapat menggunakan:
dan untuk mengambil versi Erlang OTP ( Open Telecom Platform ):
sumber
Temukan di
/usr/lib/erlang/releases/18/OTP_VERSION
sumber
18.2.1
./usr/lib/erlang/releases
- diinstal melalui ansibleerl + V atau Anda dapat menggunakan erl -version
hasil: emulator Erlang (SMP, ASYNC_THREADS) (BEAM) versi 5.8.5
sumber
erl
versi emulator, bukan nomor versi rilis Erlang (misalnya "R15B03"). Semua itu bisa sangat mudah ;-)Menemukan erl di PATH Anda dan membaca file RELEASES untuk mengekstrak nomor rilis erlang.
sumber
Buka terminal dan masukkan perintah erl
Anda akan mendapatkan hasil sebagai berikut:
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] Eshell V5.10.4 (batalkan dengan ^ G)
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp: 4: 4] [async-threads: 10] [kernel-poll: false] - Ini adalah versi bahasa
Eshell V5.10.4 (batalkan dengan ^ G) - Ini adalah versi shell
sumber
Berdasarkan jawaban Jay di atas, saya menulis fungsi shell berikut yang dapat saya gunakan:
Saya sering lupa bahwa perintahnya adalah
erl
alih-aliherlang
, jadi ini membuat otak saya yang pelupa menggunakannyaerlang
seolah-olaherl
, danerlang -v
seperti yang saya harapkan dari sesuatu sepertielixir
.sumber
Perintah sederhana yang dapat Anda gunakan:
sumber