কিভাবে শেল থেকে এরলংয়ের মুক্তির সংস্করণ নম্বর পাবেন?


108

অনেক প্রোগ্রাম তাদের সংস্করণ নম্বরটি কমান্ডের সাহায্যে ফেরত দেয়:

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

প্রোগ্রামটি ইনস্টলেশন বা রক্ষণাবেক্ষণের স্ক্রিপ্টিং এবং সিস্টেম অ্যাডমিনস এবং বন্ধুদের কাছ থেকে কিছু অন্যান্য নিয়ন্ত্রিত অটোমেশন যাদুতে এটি কার্যকর।

সমস্যা

কীভাবে সহজেই এরলং (ওটিপি) জন্য সংস্করণ নম্বর পাবেন ?

নেট

এখানে কিছু অসন্তুষ্টিজনক সমাধান ([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}].

স্বর্গ পার্সিং (শেল দিয়ে)।

কোনও বিকল্পে ইনস্টলনের পথটি পরীক্ষা করাও হতে পারে, তবে সেটি পোর্টেবল নয় (একের জন্য আমার ইনস্টল পাথটি সংস্করণটি অন্তর্ভুক্ত করে না)।

ব্যক্তিগত প্রসঙ্গে: বেশ কয়েকটি মেশিনে প্লাগইন সহ রাবিট এমকিউয়ের একই সংস্করণ ইনস্টল করতে আমি একটি স্ক্রিপ্ট লিখছি। কিছু প্লাগইনগুলির ওটিপি সংস্করণে ন্যূনতম প্রয়োজনীয়তা থাকে এবং এই প্রশ্নটি কীভাবে শুরু হয়েছিল।

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


রিলিজ সম্পর্কে এত খারাপ কী? এটি তুচ্ছভাবে এরলং দ্বারা বিভক্ত :-)
জুলিয়ান ফন্ড্রেন

উফফফ, এর সাথে খারাপ কিছু নেই! প্রসঙ্গে প্রবন্ধটি সম্পাদনা করেছি। আমার অর্থ শেল সরঞ্জামগুলির সাহায্যে এরলং স্ট্রিংকে পার্স করা। আমার লক্ষ্য একটি এরিং প্যাকেজের জন্য এসএ টাস্ক্রিপ্ট করা।
এরিক প্লাটন 5'12

আমি এখনও এরলং সিনট্যাক্স বুঝতে পারি না; আমি কেবল যাচাই করতে চাই যে ইনস্টল করা সংস্করণটি রিক সমর্থন করে কিনা। এটি অভিনীত এবং আশা করা যায় যে একদিন এরলং এর সংস্করণটির উপর নির্ভরশীল এমন সরঞ্জামগুলির প্রশাসকদের কাছে এটির সংস্করণটি প্রতিবেদন করার সহজ উপায় সরবরাহ করবে।
আইয়েন স্যামুয়েল ম্যাকলিন বয়স্ক

উত্তর:


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

দুঃখিত যখন আমি এটি পোস্ট করি তার আগে আরও বিস্তৃত উত্তর দেখতে পেলাম না
ওডোবেনাস রোসমারাস

3
(no error logger present) error: "Error in process <0.0.0>আমার জন্য উইন্ডোজ 7 এ এটি প্রিন্ট করে। -1
জোনাস

1
@ ওপ্যাট, আপনার পরামর্শটি আমার জন্য এরলং শেলের সংস্করণটি (যেমন 7.0.2) প্রেরণ করবে 18, নিজেই এরং নয় ( আমার ক্ষেত্রে)।
gdw2

6
এরলংয়ের জন্য ডক্স থেকে: system_info: ওটিপি 17 হিসাবে, ওটিপি প্রকাশের সংখ্যাটি প্রধান ওটিপি সংস্করণ সংখ্যার সাথে মিলে যায়। কোনও ত্রুটি নেই: system_info () আর্গুমেন্টটি সঠিক ওটিপি সংস্করণ দেয়। এমনকী একটি কৃপণ কমান্ডের জন্য নীচে আমার উত্তরটি দেখুন যা আমার বিকাশের যন্ত্রটিতে ছোটখাটো সংস্করণও ছাপায়।
জয়

2
উইন্ডোজ On-এ, আমাকে একক উদ্ধৃতিগুলি ডাবল কোট সহ প্রতিস্থাপন করতে হয়েছিল। erl -eval "erlang:display(erlang:system_info(otp_release)), halt()." -noshell
yohosuff

81

অন্যান্য উত্তরগুলি কেবল ওটিপি 17 হিসাবে বড় সংস্করণ প্রদর্শন করে ( এরং এর জন্য ডক্স থেকে : 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
ডগবার্ট

উইন্ডোজ On-এ, আমাকে ডাবল কোট (এবং বিপরীতে) এর সাথে একক উদ্ধৃতিগুলি অদলবদল করতে হয়েছিল। 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
yohosuff

38

(আমি এই উত্তরটি এখানে যুক্ত করছি যেহেতু আমি গত তিন মাসে এটির জন্য কমপক্ষে 3 বার অনুসন্ধান করেছি)

১.0.০ সংস্করণ থেকে শুরু করে রিলিজেসগুলির সংস্করণ নম্বরটিতে (17.0, 17.1, ...) একটি নতুন ফর্ম্যাট রয়েছে তবে erlang:system_info(otp_release).কেবলমাত্র প্রধান সংস্করণ নম্বরটি প্রদান করে returns

পূর্ণ সংস্করণ নম্বর পেতে 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 ইনস্টল করা আছে। "এক্স" কী তা আমি কীভাবে জানতে পারি?
নোবজেড

1
@ নোবজেডজ আমি অতিরিক্ত তথ্যের সাথে উত্তরটি আপডেট করেছি, আমি স্রেফ পরীক্ষা করে দেখেছি এবং বর্তমান ইনস্টল করা / ওটিপি সংস্করণে আমি ইনস্টল করেছি (17.4) ফাইলটি আসলে ডাকা হয় OTP_VERSION
juan.facorro

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).'

এই উদাহরণটি হেরেগাডেসিমাল ক্যালকুলেটর হিসাবে এরলং ব্যবহার করে:

% 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

ইশেল (এরলং শেল) সংস্করণটি পুনরুদ্ধার করতে, আপনি ব্যবহার করতে পারেন:

erlang:system_info(version).

এবং এরলং ওটিপি ( ওপেন টেলিকম প্ল্যাটফর্ম ) সংস্করণটি পুনরুদ্ধার করতে :

erlang:system_info(otp_release).


এখানে চিত্র বর্ণনা লিখুন


2
সর্বোত্তম উত্তর h আপনি যদি চান - রূপান্তরটি কাজ করে।
চার্লি

7

খুঁজে /usr/lib/erlang/releases/18/OTP_VERSION


হ্যাঁ, এটি কাজ করে। প্রশ্নে রিলিজ ফাইল বিভাগের মতোই , আপনার প্রস্তাবিত সমস্যাটি হ'ল এটি ইনস্টলের পথে জ্ঞান গ্রহণ করে। এখানে সুবিধাটি হ'ল সম্পূর্ণ সংস্করণটি পাওয়া। আমার জন্য: 18.2.1
এরিক প্লাটোন

এই ফাইলটি সেন্টোস 7
এডুয়ার্ডো কুওমো

/usr/lib/erlang/releases - উত্তরযোগ্য মাধ্যমে ইনস্টল করা হয়েছে
ওলগা

4

erl + V বা আপনি erl -version ব্যবহার করতে পারেন

ফলাফল: এরলং (এসএমপি, ASYNC_THREADS) (বিম) এমুলেটর সংস্করণ 5.8.5


5
এটি erlএমুলেটর সংস্করণ প্রদান করে, এরলং প্রকাশের সংস্করণ নম্বর নয় (উদাঃ "আর 15 বি03")। এগুলি এত সহজ হতে পারে ;-)
এরিক প্লাটন

2

আপনার পাঠ্যপুস্তিতে এরল খুঁজে পাওয়া যায় এবং এরং রিলিজ নম্বরটি বের করতে রিলিজ ফাইলটি পড়ে।

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

1

টার্মিনাল খুলুন এবং কমান্ড erl লিখুন

আপনি নিম্নলিখিত আউটপুট পাবেন:

এরলং আর 16 বি03 (আর্টস -১.১০.৪) [উত্স] [-৪-বিট] [এসএমপি: ৪: ৪] [অ্যাসিঙ্ক-থ্রেডস: 10] [কার্নেল-পোল: মিথ্যা] এসেল ভি 5.10.4 (^ জি সহ গর্ভপাত)

এরলং আর 16 বি03 (আর্টস -১.১০.৪) [উত্স] [-৪-বিট] [এসএমপি: ৪: ৪] [অ্যাসিঙ্ক-থ্রেড: 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
এই কমান্ডটি শেলের দিকে নিয়ে যায়। স্ক্রিপ্টিংয়ের জন্য কীভাবে সংস্করণটি পাবেন তা প্রশ্ন।
এরিক প্লাটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.