ব্যাশ স্ক্রিপ্টে yum এর মাধ্যমে একটি প্যাকেজ ইনস্টল করা আছে কিনা তা আমি কীভাবে বলতে পারি?


75

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

উত্তর:


76

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

yum list installed PACKAGE_NAME

এই কমান্ডটি কিছু মানব-পঠনযোগ্য আউটপুট দেয়, তবে আরও গুরুত্বপূর্ণভাবে একটি প্রস্থান স্থিতি কোড দেয়; 0 প্যাকেজ ইঙ্গিত করা হয় 1 ইঙ্গিত প্যাকেজ ইনস্টল না ইনস্টল (চেক করবেন কিনা প্যাকেজ বৈধ, তাই yum list installed herpderp-beepbopboopএকটি "1" ফিরে আসবে ঠিক যেমন yum list installed tracerouteহবে যদি আপনি traceroute ইনস্টল না)। আপনি পরবর্তীকালে "$" পরীক্ষা করতে পারেন? এই প্রস্থান কোডের জন্য।

যেহেতু আউটপুটটি কিছুটা স্ব-স্বজ্ঞাত, তাই আউটপুটটিকে আরও "লজিকাল" (যেমন 1 = ইনস্টলড = = ইনস্টল করা হয়নি) করতে আমি নীচে একটি ক্র্যাপার ডাউনস এর "কনডেন্সড" সংস্করণটি ব্যবহার করেছি:

function isinstalled {
  if yum list installed "$@" >/dev/null 2>&1; then
    true
  else
    false
  fi
}

ব্যবহার হবে

if isinstalled $package; then echo "installed"; else echo "not installed"; fi

সম্পাদনা করুন:

returnকলগুলি দিয়ে প্রতিস্থাপনের বিবৃতি trueএবং falseযা ফাংশনটিকে আরও পাঠযোগ্য / স্বজ্ঞাত করতে সহায়তা করে, মানগুলি প্রত্যাশাগুলি প্রত্যাবর্তনের সময় (অর্থাত সত্যের জন্য 0, ভ্রান্তের জন্য 1)।

আপনি যদি কেবলমাত্র আপনার স্ক্রিপ্টে একটি প্যাকেজের জন্য যাচাই করছেন, আপনি yum list installedসরাসরি পরীক্ষা করার চেয়ে আরও ভাল হতে পারেন , তবে (আইএমএইচও) ফাংশনটি কী চলছে তা বোঝা আরও সহজ করে তোলে এবং এর বাক্য গঠনটি yumসমস্ত পুনঃনির্দেশের চেয়ে মনে রাখা খুব সহজ is তার আউটপুট দমন করা।


2
আপনাকে ম্যানুয়ালি মান পরীক্ষা করতে হবে না $?, কেবলমাত্র শর্তসাপেক্ষে কমান্ডটি মোড়ানো:if yum list installed "$package" >/dev/null 2>&1; then [...]
ক্রিস ডাউন

1
আমার মনে হয় আপনার প্রতিধ্বনি বিবৃতি বিপরীত হয়েছে, না? isInstalledপ্যাকেজ ইনস্টল করা থাকলে 1 প্রদান করে; তবে 1 টি ব্যাশের ক্ষেত্রে মিথ্যা হিসাবে মূল্যায়ন করা হয় তাই "ইনস্টল করা নেই" প্রতিধ্বনিত হয়।
এফগ্রিগ

@ এফগ্রিগ শুভ কল ... আমি returnকলগুলিতে বিবৃতিগুলি প্রতিস্থাপন করেছি trueএবং falseতাই ফাংশনটি সহজেই পঠনযোগ্য তবুও আউটপুট বাশ প্রত্যাশাকে প্রত্যাবর্তন করে।
ডক্টর জে

5
ওএমজি এটি একবিংশ শতাব্দীর, কোনও প্যাকেজ ইনস্টল করা আছে কিনা তাই বলার মতো উপযুক্ত বিকল্প তাদের কাছে থাকতে পারে না যাতে আমার কাছে রাইটিং ফাংশন বা একটি লাইনার নেই !?
সুনীল ডি

21

"ইয়াম-এর মাধ্যমে" প্রশ্নের পূর্বশর্তটি সঠিকভাবে পূরণ করছে না তবে "ইয়াম-কিউ তালিকা" এর চেয়ে দ্রুততর:

rpm -q <package_name>

যা সম্ভবত ইনস্টল করা সংস্করণটির সঠিক নাম এবং ইনস্টল করা থাকলে ত্রুটি কোড "0" এবং না থাকলে "1" প্রদান করে।


+1 কারণ এটি দ্রুত
ফ্রেডি ফ্যাব্রেগাস

অবশ্যই দ্রুততর, কারণ rpmস্থানীয় প্যাকেজ পরিচালক। yumদূরবর্তী সংগ্রহস্থলগুলিতে প্যাকেজগুলির সাথে কাজ করার জন্য
সের্গেই কলডিয়াজনি

9

সরল অনলাইনার:

yum -q list installed packageX &>/dev/null && echo "Installed" || echo "Not installed"

0

ইয়মের জন্য একটি সহজ স্ক্রিপ্ট:

#!/bin/sh pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME) yum update -y for i in ${pckarr[*]} do isinstalled=$(rpm -q $i) if [ ! "$isinstalled" == "package $i is not installed" ]; then echo Package $i already installed else echo $i is not INSTALLED!!!! yum install $i -y fi done updatedb

প্যাকার অ্যারেতে, আপনি যে প্যাকেজগুলি ইনস্টল করতে চান তা তালিকাবদ্ধ করুন বা এটি ইনস্টল রয়েছে কিনা তা পরীক্ষা করুন।


0

আপনি $?ইয়াম থেকে ফেরতের মানটিও পড়তে পারেন । ইয়াম কী ধরণের সমস্যার মুখোমুখি হয়েছিল তার উপর নির্ভর করে যদি সমস্ত কিছু কাজ করে বা ইতিবাচক হয় তবে 0 হওয়া উচিত। যদি কিছু ব্যর্থ হয় তবে আপনি বিভিন্ন পদক্ষেপ নিতে চাইলে এটি একটি ভাল উপায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.