सिस्टम पैकेज मैनेजर की पहचान करना


12

क्या डिफ़ॉल्ट सिस्टम पैकेज मैनेजर की पहचान करने का कोई तरीका (स्क्रिप्ट से) है?

स्पष्ट करने के लिए, मैं जो करना चाहता हूं, वह दी गई कमांड को चलाता है और उसके डेबियन या उसके किसी भी डेरिवेटिव पर यह "apt" जैसा कुछ लौटाएगा, खुले तौर पर यह "zypp" लौटाएगा, फेडोरा एट अल पर यह वापस आ जाएगा "यम", आर्क लिनक्स पर यह "पैक्मैन" आदि लौटाएगा।

मुझे पता है कि मैं ऐसा कुछ निम्नलिखित के साथ कर सकता हूं, मुझे आश्चर्य हुआ कि क्या कोई और अधिक मजबूत तरीका था जो एक ही नाम के साथ निष्पादन योग्य होते ही नहीं टूटेगा।

which apt >/dev/null 2>&1
if [ $? -eq 0 ]
then
    echo "apt"
fi
# etc...

जवाबों:


9

इस प्रश्न के स्वीकृत उत्तर से शुरू करें: मैं एक सरल शेल स्क्रिप्ट में वितरण नाम और संस्करण संख्या कैसे प्राप्त कर सकता हूं? । फिर, यह तय करें कि आप किस वितरण प्रबंधक का उपयोग किए गए वितरण के आधार पर करना चाहते हैं।


क्या विभिन्न वितरणों के लिए पैकेज प्रबंधकों की आसानी से उपलब्ध सूची है? विशेष रूप से बहुत सारे डेबियन क्लोन हैं।
DrAl

आसानी से उपलब्ध सूची के बारे में निश्चित नहीं है, लेकिन सभी डेबियन क्लोन का उपयोग करेंगे apt-get
जिम पेरिस

हाँ, मुझे लगता है कि; मेरी समस्या वितरण की इतनी पहचान नहीं है (हालांकि आपका लिंक निश्चित रूप से यह आसान बना देगा), यह पता लगा रहा है कि वितरण का नाम कैसे लिंक किया जाए (जैसे यादृच्छिक पर एक लेने के लिए) "SolusOS" प्रत्येक वितरण की सूची बनाए बिना उपयुक्त है। वह मौजूद है।
DrAl

इसे ऑटोटूलस तरीके से करें: जांचें कि क्या यह काम करता है। BTW, कि एक वितरण उपयुक्त का उपयोग करता है इसका मतलब है कि यह एक डेबियन रिश्तेदार है (और वे एक बल्कि कॉम्पैक्ट गुच्छा हैं), यम को खोजने का मतलब यह नहीं है कि पैकेजिंग सम्मेलनों (पुस्तकालय / विकास में विभाजन, पर्ल या व्यक्तिगत पैकेज का एक बड़ा ईंट बंद) CPAN, ...) समान हैं। CentOS पर फेडोरा पैकेज स्थापित करने की कोशिश भी न करें (कम से कम 3 या 4 साल के संस्करण तिरछा हैं, बस काम नहीं करेंगे)।
वॉनब्रांड

डिस्ट्रो का पता लगाना केवल लोकप्रिय लोगों के लिए काम करेगा। सभी कम वितरणों के लिए एक श्वेतसूची को अद्यतन नहीं किया जा सकता है। उपकरणों की उपस्थिति का प्रत्यक्ष परीक्षण करना ही इसे काम करने का एकमात्र तरीका है। यदि यह एक बतख की तरह दिखता है, एक बतख की तरह तैरता है, और एक बतख की तरह चुटकी लेता है, तो संभवतः यह एक बतख है।
आजाद करें

8

द्विआधारी कार्यक्रमों की पहचान के बजाय, आपको वितरण की पहचान से शुरू करना चाहिए,

बस आपको कुछ पंक्तियाँ दें जो बैश स्क्रिप्टिंग में काम करती हैं:

declare -A osInfo;
osInfo[/etc/redhat-release]=yum
osInfo[/etc/arch-release]=pacman
osInfo[/etc/gentoo-release]=emerge
osInfo[/etc/SuSE-release]=zypp
osInfo[/etc/debian_version]=apt-get

for f in ${!osInfo[@]}
do
    if [[ -f $f ]];then
        echo Package manager: ${osInfo[$f]}
    fi
done

इन भागों पर भरोसा नहीं किया जा सकता है, लेकिन आम तौर पर लोग ऐसा नहीं करेंगे।


2

मैंने दूसरों की समीक्षा करने के बाद इस मार्ग पर जाने का विकल्प चुना। यह मेरे लिए आया जब कई डॉकटर कंटेनरों को चलाने और कर्ल / जक की जरूरत थी और नौकरी से नौकरी के लिए जो उपलब्ध था उस पर भरोसा करने में सक्षम नहीं था।

script:
 - if [ -x "$(command -v apk)" ]; then apk add --no-cache curl jq; fi
 - if [ -x "$(command -v apt-get)" ]; then apt-get install curl jq; fi
 - if [ -x "$(command -v dnf)" ]; then dnf install curl jq; fi
 - if [ -x "$(command -v zypper)" ]; then zypper install curl jq; fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.