मैं कैसे बता सकता हूं कि क्या कोई पैकेज यश स्क्रिप्ट के माध्यम से स्थापित किया गया है?


75

मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो संकुल स्थापित करता है, लेकिन अगर यह किसी भी बिंदु पर बाद में विफल रहता है तो स्क्रिप्ट जो भी स्थापित करता है उसे वापस रोल करता है। बेशक अगर उपयोगकर्ता पहले से ही एक पैकेज स्थापित कर चुका है तो मैं इसे उनके नीचे से अनइंस्टॉल नहीं करना चाहता। मेरी स्क्रिप्ट कैसे बता सकती है कि क्या पहले एक पैकेज yum के माध्यम से स्थापित किया गया है?

जवाबों:


76

मैंने एक अर्ध-संबंधित स्टैकऑवरफ्लो प्रश्न पर निम्नलिखित पाया ; मुझे जिस उत्तर की आवश्यकता थी, वह वास्तव में वहाँ सवाल का बहुत जवाब नहीं था (और सही उत्तर के रूप में नहीं चुना गया था) इसलिए मुझे लगा कि मैं इसे दूसरों के लिए आसान खोजने के लिए यहां पोस्ट करूंगा।

yum list installed PACKAGE_NAME

यह कमांड कुछ मानव-पठनीय आउटपुट देता है, लेकिन अधिक महत्वपूर्ण रूप से एक निकास स्थिति कोड देता है; 0 पैकेज इंगित करता है 1 इंगित करता है पैकेज है, स्थापित नहीं स्थापित (जाँच नहीं पड़ता कि पैकेज मान्य है, तो yum list installed herpderp-beepbopboopएक "1" वापस आ जाएगी बस के रूप में yum list installed tracerouteअगर आप ट्रेसरूट स्थापित नहीं है)। आप बाद में "$" की जांच कर सकते हैं? इस निकास कोड के लिए।

चूंकि आउटपुट कुछ प्रति-सहज है, इसलिए मैंने आउटपुट को और अधिक "तार्किक" बनाने के लिए एक आवरण फ़ंक्शन में नीचे दिए गए @Chris Downs "" संघनित "संस्करण का उपयोग किया (अर्थात 1 = स्थापित 0 = स्थापित नहीं):

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सीधे सीधे परीक्षण से बेहतर हो सकते हैं, लेकिन (IMHO) फ़ंक्शन को समझना आसान बनाता है कि क्या हो रहा है, और इसके सिंटैक्स को yumसभी रीडायरेक्ट की तुलना में याद रखना बहुत आसान है। इसके उत्पादन को दबाने के लिए।


2
आपको मैन्युअल रूप से मान की जांच करने की आवश्यकता नहीं है $?, बस एक सशर्त में कमांड लपेटें:if yum list installed "$package" >/dev/null 2>&1; then [...]
क्रिस डाउन

1
मुझे लगता है कि आपके गूंजने वाले बयान उलटे हैं, नहीं? isInstalledपैकेज स्थापित होने पर 1 रिटर्न; लेकिन 1 को झूठे में मूल्यांकन किया जाता है, इसलिए "स्थापित नहीं" प्रतिध्वनित होता है।
FGreg

@ अच्छी कॉल करें ... मैंने returnस्टेटमेंट को कॉल्स के साथ बदल दिया है trueऔर falseइसलिए फंक्शन आसानी से पढ़ा जा सकता है लेकिन आउटपुट बैश की उम्मीद है।
डॉकटर जे

5
OMG यह 21 वीं सदी है, उनके पास यह बताने का उचित विकल्प नहीं है कि क्या कोई पैकेज स्थापित किया गया है, इसलिए मेरे पास फंक्शन या एक लाइनर नहीं है !?
सुनील डी।

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

Pckarr सरणी में, उन पैकेजों को सूचीबद्ध करें, जिन्हें आप इंस्टॉल करना चाहते हैं या जांचना चाहते हैं कि क्या इंस्टॉल किया गया है।


0

आप $?yum से रिटर्न वैल्यू भी पढ़ सकते हैं । 0 होना चाहिए अगर सब कुछ काम किया या सकारात्मक इस बात पर निर्भर करता है कि यम किस तरह के मुद्दों में भाग गया। यह एक अच्छा तरीका है अगर आप कुछ विफल होने पर अलग-अलग कार्रवाई करना चाहते हैं।

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