बैश / शेल स्क्रिप्ट निर्भरता की जाँच करें


13

क्या बैश स्क्रिप्ट की निर्भरता की जाँच करने के लिए कोई तरीका / कमांड है? दूसरे शब्दों में, इस सवाल का जवाब: उपयोगकर्ता को स्क्रिप्ट चलाने के लिए कौन सी लाइब्रेरी स्थापित करनी चाहिए?

मैं इसे स्क्रिप्ट को पढ़कर मैन्युअल रूप से कर सकता हूं और जांच सकता हूं कि अन्य लाइब्रेरी / कमांड इसे कॉल करते हैं लेकिन यह लंबी स्क्रिप्ट के लिए स्पष्ट नहीं है।

जवाबों:


8

अविश्वसनीय रूप से आर्कन ऑटोकॉफ़ सिस्टम का उपयोग किया गया है

सॉफ्टवेयर स्रोत कोड पैकेज को स्वचालित रूप से कॉन्फ़िगर करने के लिए शेल स्क्रिप्ट का उत्पादन करें। ये स्क्रिप्ट मैनुअल उपयोगकर्ता के हस्तक्षेप के बिना कई प्रकार के UNIX जैसी प्रणालियों के पैकेज को अनुकूलित कर सकती हैं। ऑटोकॉन्फ़ एक टेम्पलेट फ़ाइल से पैकेज के लिए एक कॉन्फ़िगरेशन स्क्रिप्ट बनाता है जो ऑपरेटिंग सिस्टम सुविधाओं को सूचीबद्ध करता है जो पैकेज का उपयोग कर सकता है, एम 4 मैक्रो कॉल के रूप में।

यदि वह पर्याप्त रूप से डरावना नहीं है, तब तक प्रतीक्षा करें जब तक कि आप अपनी पहली ऑटोकॉफ स्क्रिप्ट लिखने की कोशिश न करें। ऑटोकॉन्फ़ के लेखक इसकी कठिनाई के बारे में शर्मीले नहीं हैं :

जो लोग ऑटोकॉन्फ को नहीं समझते हैं, वे इसे खराब तरीके से मजबूत करने के लिए निंदा करते हैं। Autoconf का प्राथमिक लक्ष्य उपयोगकर्ता के जीवन को आसान बना रहा है; अनुरक्षक का जीवन आसान बनाना केवल एक गौण लक्ष्य है। एक और तरीका रखो, प्राथमिक लक्ष्य पैकेज अनुरक्षकों के लिए स्वचालित कॉन्फ़िगर करने की पीढ़ी बनाना नहीं है; बल्कि, लक्ष्य यह है कि प्रत्येक ऑटोकॉन्फ़िक्टेड पैकेज के अंतिम उपयोगकर्ता के लिए दर्द रहित, पोर्टेबल और पूर्वानुमान योग्य कॉन्फ़िगर किया जाए। और इस डिग्री के लिए, ऑटोकॉन्फ़ अपने लक्ष्य पर अत्यधिक सफल है - ऑटोकॉन्फ़ सूची में अधिकांश शिकायतें ऑटोकॉन्फ़ इनपुट लिखने में कठिनाइयों के बारे में हैं, और परिणामस्वरूप कॉन्फ़िगर के व्यवहार में नहीं।

दूसरी ओर, आप इस प्रक्रिया से बाहर निकलेंगे कि आपके द्वारा कभी कल्पना की गई विभिन्न प्रणालियों के काल्पनिक बिट्स के बारे में अधिक जानकारी होगी।

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


3

यह स्वचालित करने के लिए एक सरल काम नहीं है, क्योंकि एक स्क्रिप्ट स्थैतिक विश्लेषण को हराने वाले निर्माणों का उपयोग कर सकती है। यह कभी का उपयोग करता है evalया किसी भी तरह उपसर्ग timeया nice, यह कुछ ऐसा चल रहा है के रूप में सरल रूप में नहीं किया जाएगा egrep -o '^[^ ]+ ? 'आदेशों पाने के लिए और के माध्यम से उन्हें चल रहा whichया type

अंत में, पूरी तरह से सुनिश्चित होने का एकमात्र तरीका स्क्रिप्ट को चलाना है और यह पता लगाना है कि क्या विफल रहता है। यदि कोई स्क्रिप्ट अच्छी तरह से लिखी गई है, तो यह चलने से पहले गैर-मानक कमांड के लिए जांच करेगी। यदि नहीं, तो परीक्षण और त्रुटि निश्चित होने का एकमात्र तरीका है।

कहा जा रहा है कि, इस तरह से कुछ मदद कर सकता है:

#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
    while read line
    do
        if type $line &>/dev/null
        then
            echo "$line found"
        else
            echo "Error: $line not found"
        fi
    done
} | sort

आउटपुट जैसा दिखेगा:

$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.