সফ্টওয়্যার ইনস্টল করা আছে কিনা তা সনাক্ত করার (স্ক্রিপ্ট থেকে) সেরা উপায় কী?


9

whichবিভিন্ন প্লাটফর্মগুলি (লিনাক্স বনাম সোলারিস ভিএক্স। ওএস এক্স) -র কমান্ড থেকে আউটপুট সংক্রান্ত পার্থক্যের সাথে আমি আগে হতাশ হয়েছি , বিভিন্ন শেল সম্ভবত বিষয়টি নিয়ে চালাচ্ছে। typeআরও ভাল বিকল্প হিসাবে পরামর্শ দেওয়া হয়েছে, তবে এটি কীভাবে বহনযোগ্য হবে?

অতীতে আমি ফাংশনগুলি লিখেছি যা আউটপুটকে বিশ্লেষণ করে whichএবং আমি যে বিভিন্ন ব্যবহারের ক্ষেত্রে চলেছি তা পরিচালনা করে। তারা আমার ব্যবহৃত মেশিনগুলি জুড়ে কাজ করে এবং এটি আমার ব্যক্তিগত স্ক্রিপ্টগুলির জন্য ঠিক আছে, তবে অন্যদের ব্যবহারের জন্য আমি কোথাও পোস্ট করতে চলেছি এমন সফ্টওয়্যারটির জন্য এটি অত্যন্ত অবিশ্বাস্য বলে মনে হয়।

একটি মাত্র সম্ভাব্য উদাহরণ গ্রহণ করার জন্য, ধরুন আমি কোনও স্ক্রিপ্ট থেকে ব্যাশ এবং জ্যাশ কোনও মেশিনে উপলব্ধ কিনা তা খুঁজে বের করতে হবে, এবং তারপরে zsh উপস্থিত থাকলে একটি কমান্ড চালাতে হবে, এবং zsh যদি নেই এবং বাশ যথেষ্ট পরিমাণে আছে তবে সংস্করণে কোনও নির্দিষ্ট বাগ নেই। স্ক্রিপ্টের বাকী অংশটি বেশিরভাগই বোর্ন শেল বা রুবি বা অন্য যে কোনও কিছু হতে পারে তবে zsh বা বাশের সাম্প্রতিক সংস্করণটি নিয়ে এই একটি বিশেষ জিনিসটি অবশ্যই করা উচিত (এএফএআইকে)।

আমি কি typeপ্ল্যাটফর্ম জুড়ে উপলব্ধ গণনা করতে পারি ? আরও কিছু বিকল্প আছে whichযার কোন নির্দিষ্ট টুকরা সফ্টওয়্যার ইনস্টল করা আছে কিনা সেই প্রশ্নের সহজেই এবং ধারাবাহিকভাবে উত্তর দিতে পারে?

(আপনি যদি আমার দেওয়া উদাহরণের সাথে বিশেষভাবে সম্পর্কিত ধারণাগুলিও দিতে চান তবে এটি দুর্দান্ত, তবে আমি সাধারণভাবে কেবল সাধারণ কেস সম্পর্কে জিজ্ঞাসা করছি: কোনও নির্দিষ্ট জিনিস কোনও প্রদত্ত মেশিনে ইনস্টল করা আছে কিনা তা খুঁজে পাওয়ার সবচেয়ে নির্ভরযোগ্য উপায় কী? ?)

উত্তর:


10

একবিংশ শতাব্দীতে, বিশেষত আপনি যদি এমন মেশিনগুলিকে টার্গেট করছেন যেগুলিতে বাশ বা জেডএস সম্ভবত রয়েছে, আপনি typeউপলব্ধ থাকার উপর নির্ভর করতে পারেন । (এটি ১৯ old০ এর দশক বা ১৯ from০ এর দশকের গোড়ার দিক থেকে অত্যন্ত পুরানো সংঘের মধ্যে উপস্থিত ছিল না)) আপনি এর ফলাফলের অর্থ কোনওটির উপর নির্ভর করতে পারবেন না, তবে সেই নামটির আদেশ আছে এবং আপনি তার প্রত্যাবর্তন 0-এ গুনতে পারেন and অন্যথায় ননজারো

whichমানসম্মত নয় এবং অনুশীলনে বিশ্বাসযোগ্য নয় । typeপ্রস্তাবিত বিকল্প। whereisএকই সমস্যা হিসাবে ভুগছেন whichএবং কম সাধারণ। whenceksh এবং zsh এর জন্য নির্দিষ্ট।

যখন এটি সম্ভব হয়, কমান্ডের অস্তিত্ব পরীক্ষা করা এবং এর আচরণটি যুক্তিযুক্ত বলে মনে হচ্ছে কিনা তা পরীক্ষা করা আরও নির্ভরযোগ্য হবে। উদাহরণস্বরূপ, দৌড়ের মাধ্যমে ব্যাশের উপযুক্ত সংস্করণের উপস্থিতি পরীক্ষা করুন bash -c 'somecommand'eg

# Test for the `-v` operator (which appeared in bash 4.2)
if bash -c 'test -v HOME' 2>/dev/null; then 

আজ আপনি সিং ইউএনআইএক্স স্পেসিফিকেশন সংস্করণ 2 (ফোর্টরান এবং এসসিসিএসের মতো বহিরাগত স্টাফ ব্যতীত, যা যাইহোক optionচ্ছিক) বাদে প্রায় সব কিছুর উপর নির্ভর করতে পারেন । আপনি বেশিরভাগ সংস্করণ 3 এও গণনা করতে পারেন তবে এটি এখনও সর্বত্র কার্যকরভাবে প্রয়োগ করা হয়নি। সংস্করণ 4 সমর্থন স্কেচিয়র। আপনি যদি এই চশমাগুলি পড়তে চলেছেন তবে আমি সংস্করণ 3 পড়ার পরামর্শ দিচ্ছি যা সংস্করণ 2 এর চেয়ে অনেক বেশি পাঠযোগ্য এবং কম অস্পষ্ট।

সিস্টেমের বৈশিষ্ট্যগুলি কীভাবে সনাক্ত করা যায় তার উদাহরণগুলির জন্য, অটোকনফ এবং configureবিভিন্ন সফ্টওয়্যারের স্ক্রিপ্টগুলিতে দেখুন ।

আরও টিপসের জন্য পোর্টেবল শেল প্রোগ্রামিংয়ের সংস্থানগুলিও দেখুন ।


এটি ব্যবহার hashএবং সাধারণভাবে প্রস্তাবিত কৌশলগুলিতে মন্তব্য করার জন্য কোনও সম্প্রসারণ থেকে উপকৃত হতে পারে command -v
কালেব

@ কালেব এই প্রশ্নের প্রয়োজনে, আমি command -vওভারের কোনও লাভ দেখতে পাচ্ছি না type, আমাদের কেবল একটি বুলিয়ান ফলাফল। আপনি কোন "সাধারণত ব্যবহারের প্রস্তাবিত কৌশলগুলি hash" ব্যবহার করছেন ?
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.