2011-08-07 6 views

उत्तर

48

यह आपके diff कमांड पर निर्भर करता है। मेरा (जीएनयू diffutils 3.0) का कहना है:

मतलब है 0 का एक बाहर निकलें स्थिति कोई मतभेद नहीं पाए गए, 1 का मतलब है कुछ मतभेद पाए गए, और 2 मुसीबत का मतलब है। आम तौर पर, भिन्न बाइनरी फाइलें परेशानी के रूप में गिनती हैं, लेकिन इसे -a या --text विकल्प, या -q या --brief विकल्प का उपयोग करके बदला जा सकता है।

+4

सहमत हुए, मैं स्रोतों की जाँच की है, और केवल बाहर निकलने के कोड EXIT_SUCCESS, EXIT_FAILURE (दोनों stdlib.h में परिभाषित) और EXIT_TROUBLE हैं , src/diffutils-3.0/system.h –

+0

में परिभाषित किया गया है कि '--text' विकल्प दो (बड़ी) विभिन्न बाइनरी फाइलें होने पर मेरे STDOUT की गड़बड़ी करता है। –

+0

मैं भी जीएनयू diffutils का उपयोग कर रहा हूँ लेकिन गलत आदमी पेज उद्धृत किया। –

6

शायद आपके द्वारा उपयोग किए जाने वाले संस्करण के संस्करण के आधार पर अलग-अलग त्रुटि कोड नहीं हो सकते हैं। अगर मुझे सही याद है, मानक बीएसडी diff हमेशा 0, 1, या 2.

हालांकि, मैनपेज अलग-अलग सब कुछ मैपिंग नहीं कर रहा है, लेकिन जो दस्तावेज आप diff का उपयोग करने के लिए उपयोग कर सकते हैं आदेश। एक शेल स्क्रिप्ट में, मैं जानना चाहता हूं कि फाइलें मिली हैं (निकास = 0) या मेल नहीं खाती (निकास = 1)। हालांकि, मेरी शेल स्क्रिप्ट में, मैं यह भी जानना चाहता हूं कि diff कमांड स्वयं काम नहीं करता है।

diff $file1 file2 > /dev/null 2>&1 
error=$? 
if [ $error -eq 0 ] 
then 
    echo "$file1 and $file2 are the same file" 
elif [ $error -eq 1 ] 
    echo "$file1 and $file2 differ" 
else 
    echo "There was something wrong with the diff command" 
fi 

कल्पना कीजिए अगर मुझे बताया गया था कि 2 का मतलब diff आदेश में विफल रहा है, लेकिन diff आदेश के एक नए संस्करण आप जिस फ़ाइल को नहीं पढ़ सकते हैं (निकास = 2) और एक लापता फ़ाइल (निकास के बीच एक अंतर बना दिया = 3)। अब, अगर मैं diff आदेश के पिछले संस्करण में निम्नलिखित किया था की कल्पना है, लेकिन $file2 मौजूद नहीं था:

diff $file1 file2 > /dev/null 2>&1 
error=$? 
if [ $error -eq 2 ] 
then 
    echo "There was something wrong with the diff command" 
elif [ $error -eq 1 ] 
    echo "$file1 and $file2 differ" 
else 
    echo "$file1 and $file2 are the same file" 
fi 

उपरोक्त कोड में, मैं 2 और 1 की त्रुटि कोड के लिए जाँच की, लेकिन नहीं 3 इसलिए, एक लापता फाइल का पता लगाने के बजाय, मुझे लगता है कि फाइलें मिलती हैं।

मैनपेज यह सुनिश्चित करने की कोशिश कर रहा है कि ओएस के भविष्य के उन्नयन से आपकी अधिकांश शैल स्क्रिप्ट अचानक विफल हो जाएंगी। यही कारण है कि एक अलग awk और nawk कमांड और एक अलग grep और egrep कमांड था।

* @chus द्वारा टिप्पणी के अनुसार अपडेट किया गया।

+3

सावधान रहें: '$?' को निष्पादित करने के बाद अपडेट किया गया है यदि [$? eq 0] ', इसलिए 'elif' मूल्यांकन diff आउटपुट से संबंधित नहीं है। – chus

+1

"आपके द्वारा उपयोग किए जाने वाले 'diff' के संस्करण के आधार पर" [हो सकता है] अलग त्रुटि कोड नहीं हो सकता है। " [POSIX 'diff' 0 के साथ बाहर निकलता है जब फ़ाइलें समान होती हैं, 1 जब वे भिन्न होती हैं, और> 1 अन्यथा] (http://pubs.opengroup.org/onlinepubs/009696799/utilities/diff.html)। तो आप 2 मान नहीं सकते हैं, लेकिन 0 और 1 सुरक्षित हैं। –

+0

@chus आप सही हैं। मैं अपना जवाब अपडेट करूंगा। –

3

मेरे मामले diff में 127 लौट आए, इसके लिए खोज की है और "विशेष अर्थ के साथ बाहर निकलें कोड"

127 "आदेश नहीं मिला" $ पथ या लिखने में कोई त्रुटि के साथ संभावित समस्या illegal_command tldp.org में मिल।

मैंने diff के लिए गलत पथ का उपयोग किया। :)

फ़ॉन्ट: tldp.org/LDP/abs/html/exitcodes.html

संबंधित मुद्दे