शेल से एरलांग की रिलीज़ संस्करण संख्या कैसे प्राप्त करें?


108

कई प्रोग्राम एक कमांड के साथ अपना वर्जन नंबर लौटाते हैं:

$ program --version
program (platform info) v1.2.3

यह प्रोग्राम की स्थापना या रखरखाव की स्क्रिप्टिंग के लिए उपयोगी है, और सिस्टम एड्मिन और दोस्तों से कुछ अन्य नियंत्रित स्वचालन जादू।

संकट

आसानी से Erlang (OTP) के लिए संस्करण संख्या कैसे प्राप्त करें ?

नेट के ऊपर

यहां कुछ असंतोषजनक समाधान हैं ([1] और अन्य ट्यूटोरियल / एरलैंग प्रलेखन):

एमुलेटर

$ erl
1> erlang:system_info(otp_release).
"R13B03"

स्क्रिप्ट के लिए मुश्किल। मुझे erlशेल प्रॉम्प्ट से एकल कमांड निष्पादित करने का कोई तरीका नहीं मिला है ।

रिलीज़ फ़ाइल

$ 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 के समान संस्करण को स्थापित करने के लिए एक स्क्रिप्ट लिख रहा हूं। कुछ प्लगइन्स में ओटीपी संस्करण पर न्यूनतम आवश्यकताएं हैं, और यह है कि यह प्रश्न कैसे शुरू हुआ।

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


RELEASES के बारे में इतना बुरा क्या है? यह तुच्छता से Erlang :-)
जूलियन फोंडरेन

उफ़, इसके साथ कुछ भी बुरा नहीं है! मैंने संदर्भ के लिए पोस्ट को संपादित किया। मैं खोल उपकरणों के साथ Erlang स्ट्रिंग पार्स करने का मतलब था। मेरा लक्ष्य एक Erlang पैकेज के लिए SA कार्यों को स्क्रिप्ट करना है।
एरिक प्लैटन

मैं अभी तक एरलंग सिंटैक्स नहीं समझता; मैं सिर्फ यह जांचना चाहता हूं कि स्थापित संस्करण रिआक का समर्थन करता है या नहीं। इसे अभिनीत करना और यह उम्मीद करना कि एक दिन एर्लैंग अपने संस्करण को उन उपकरणों के प्रशासकों को रिपोर्ट करने का एक सरल तरीका प्रदान करेगा जो इस पर निर्भर हैं।
इयॉन सैमुअल मैकलीन एल्डर

एर्ल - विसर्जन।
माइकल डिमिट

जवाबों:


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

जब मैंने इसे पोस्ट किया था तो सॉरी को अधिक व्यापक पिछला उत्तर नहीं मिला था
Odobenus Rosmarus

3
यह (no error logger present) error: "Error in process <0.0.0>मेरे लिए विंडोज 7 पर प्रिंट करता है। -1
जोनास

1
@andPat, आपका सुझाव मेरे लिए erlang खोल का संस्करण लौटाता है (जैसे 7.0.2), erlang ही नहीं ( 18, मेरे मामले में)।
gdw2

6
Erlang के लिए डॉक्स से: system_info: OTP 17 से, OTP रिलीज़ संख्या प्रमुख OTP संस्करण संख्या से मेल खाती है। कोई erlang: system_info () तर्क सटीक OTP संस्करण देता है। मेरे जवाब को और भी बदसूरत कमांड के लिए नीचे देखें, जो मेरी विकास मशीन पर मामूली संस्करण को प्रिंट करता है।
Jay

2
विंडोज 7 पर, मुझे सिंगल कोट्स को डबल कोट्स से बदलना था। erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
योहॉसफ

81

अन्य उत्तर केवल OTP 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

यह डॉक्स में वर्णित उपयुक्त फ़ाइल से पढ़ता है ।


2
धन्यवाद, यह उपयोगी है! इसके अलावा, आप उद्धरण से छुटकारा पा सकते हैं और \nकोड को केवल एक परिवर्तन के साथ छोटा कर सकते हैं 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:।
डॉगबर्ट

विंडोज 7 पर, मुझे डबल कोट्स (और इसके विपरीत) के साथ सिंगल कोट्स स्वैप करना था। 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
योहॉसफ

38

(मैं पिछले तीन महीनों में कम से कम 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

संपादित करें

# Some versions seem to have OTP_VERSION instead of OTP_RELEASE
$ cat releases/17/OTP_VERSION
17.4

मुझे आपके विवरण से वह फ़ाइल नहीं मिली, find / -name "OTP_RELEASE"इसे या तो नहीं देखा, लेकिन मेरे पास ओटीपी 17.x स्थापित है। मैं कैसे जान सकता हूं कि "x" क्या है?
नोबजेड

1
@NobbZ मैंने अतिरिक्त जानकारी के साथ उत्तर को अपडेट किया, मैंने अभी जाँच की है और वर्तमान Erlang / OTP संस्करण में मैंने (17.4) फ़ाइल स्थापित की है जिसे वास्तव में कहा जाता है OTP_VERSION
जुआन.फैसरो

1
एक पंक्ति के साथcat $(dirname $(dirname `which erl`)/$(readlink `which erl`))/../releases/*/OTP_*
Lol4t0

14

init डॉक्स , 'मैन एर्ल' द्वारा लिंक किए गए।

-वैल एक्सप्रैस

स्कैन, पार्स और एक मनमाना अभिव्यक्ति का मूल्यांकन करता है। यदि इन चरणों में से कोई भी विफल हो जाता है (मूल्यांकन के दौरान सिंटैक्स त्रुटि, पार्स त्रुटि या अपवाद), एरलांग एक त्रुटि संदेश के साथ बंद हो जाता है। यहाँ एक उदाहरण है कि यादृच्छिक संख्या जनरेटर को बीजित करता है:

% 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

यदि एकाधिक-भाव अभिव्यक्त किए जाते हैं, तो उनका मूल्यांकन क्रमबद्ध रूप से किया जाता है। -वास्तविक अभिव्यक्तियों का क्रमिक रूप से -s और -run फ़ंक्शन कॉल के साथ मूल्यांकन किया जाता है (यह भी निर्दिष्ट क्रम में)। -S और -run के साथ, एक मूल्यांकन जो समाप्त नहीं होता है, सिस्टम आरंभीकरण प्रक्रिया को अवरुद्ध करता है।

इस प्रकार,

$ erl -noshell -eval 'io:fwrite("~s\n", [erlang:system_info(otp_release)]).' -s erlang halt

धन्यवाद, जूलियन, विस्तार के लिए। मैं evalमैन्युअल में कीवर्ड खोजना कैसे भूल सकता हूं ?
एरिक प्लैटन

12

EShell (Erlang Shell) संस्करण को पुनः प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

erlang:system_info(version).

और Erlang OTP ( ओपन टेलीकॉम प्लेटफ़ॉर्म ) संस्करण प्राप्त करने के लिए:

erlang:system_info(otp_release).


यहां छवि विवरण दर्ज करें


2
सबसे अच्छा जवाब। यदि आप चाहें तो --version काम करेगा।
चार्ली

7

इसमे ढूंडो /usr/lib/erlang/releases/18/OTP_VERSION


यह काम करता है, हाँ। के रूप में ही रिलीज फ़ाइल सवाल में अनुभाग, अपने प्रस्ताव के समस्या यह है कि इसे स्थापित पथ का ज्ञान मान लिया गया है। इसका लाभ पूर्ण संस्करण प्राप्त करने के लिए है। मेरे लिए 18.2.1:।
एरिक प्लैटन

यह फ़ाइल CentOS 7
Eduardo Cuomo

/usr/lib/erlang/releases - ओस्ली के माध्यम से स्थापित
ओल्गा

4

erl + V या आप erl -version का उपयोग कर सकते हैं

परिणाम: एरलैंग (एसएमपी, एएसवाईएनसीएचटीआरएएडीएस) (बीईएएम) एमुलेटर संस्करण 5.8.5


5
यह erlएमुलेटर संस्करण लौटाता है , एर्लैंग रिलीज़ संस्करण संख्या (जैसे "R15B03") नहीं। यह सब इतना आसान हो सकता है ;-)
एरिक प्लटन

2

अपने पथ में erl ढूँढता है और erlang रिलीज़ संख्या निकालने के लिए RELEASES फ़ाइल पढ़ता है।

awk -F, 'NR==1 {gsub(/"/,"",$3);print $3}' "$(dirname $(readlink -f $(which erl)))/../releases/RELEASES"

1

टर्मिनल खोलें और कमांड erl डालें

आपको निम्न आउटपुट मिलेगा:

एरलंग R16B03 (erts-5.10.4) [स्रोत] [64-बिट] [smp: 4: 4] [async- सूत्र: 10] [कर्नेल-पोल: असत्य] Eshell V5.10.4 (^ G के साथ गर्भपात)

एरलंग R16B03 (erts-5.10.4) [स्रोत] [64-बिट] [smp: 4: 4] [async- सूत्र: 10] [कर्नेल-पोल: गलत] - यह भाषा संस्करण है

Eshell V5.10.4 (^ G के साथ गर्भपात) - यह शेल संस्करण है


1

ऊपर दिए गए जे के उत्तर के आधार पर, मैंने निम्नलिखित शेल फ़ंक्शन को लिखा है जो मैं उपयोग कर सकता हूं:

erlang () {
    if [[ $@ == "-v" ]]; then
        command 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
    else
        command erl
    fi
}

मैं अक्सर यह भूल जाता हूं कि कमांड के erlबजाय है erlang, इसलिए यह मेरे भुलक्कड़ मस्तिष्क का उपयोग करने की अनुमति देता है erlangजैसे कि यह था erl, और erlang -vजैसे मुझे कुछ पसंद होगा elixir


-6

आप उपयोग कर सकते हैं एक साधारण आदेश:

erl --version

2
यह कमांड शेल की ओर जाता है। सवाल यह है कि स्क्रिप्टिंग के लिए केवल संस्करण कैसे प्राप्त करें।
एरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.