diff
मैन-पेज पर मुझे इन निकास मानों को मिला है:Diff के लिए त्रुटि निकास मान क्या हैं?
0 No differences were found.
1 Differences were found.
>1 An error occurred.
क्या अलग-अलग त्रुटियों के लिए 1 से ऊपर अलग-अलग निकास मान हैं?
diff
मैन-पेज पर मुझे इन निकास मानों को मिला है:Diff के लिए त्रुटि निकास मान क्या हैं?
0 No differences were found.
1 Differences were found.
>1 An error occurred.
क्या अलग-अलग त्रुटियों के लिए 1 से ऊपर अलग-अलग निकास मान हैं?
यह आपके diff
कमांड पर निर्भर करता है। मेरा (जीएनयू diffutils 3.0) का कहना है:
मतलब है
0
का एक बाहर निकलें स्थिति कोई मतभेद नहीं पाए गए,1
का मतलब है कुछ मतभेद पाए गए, और2
मुसीबत का मतलब है। आम तौर पर, भिन्न बाइनरी फाइलें परेशानी के रूप में गिनती हैं, लेकिन इसे-a
या--text
विकल्प, या-q
या--brief
विकल्प का उपयोग करके बदला जा सकता है।
शायद आपके द्वारा उपयोग किए जाने वाले संस्करण के संस्करण के आधार पर अलग-अलग त्रुटि कोड नहीं हो सकते हैं। अगर मुझे सही याद है, मानक बीएसडी 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 द्वारा टिप्पणी के अनुसार अपडेट किया गया।
सावधान रहें: '$?' को निष्पादित करने के बाद अपडेट किया गया है यदि [$? eq 0] ', इसलिए 'elif' मूल्यांकन diff आउटपुट से संबंधित नहीं है। – chus
"आपके द्वारा उपयोग किए जाने वाले 'diff' के संस्करण के आधार पर" [हो सकता है] अलग त्रुटि कोड नहीं हो सकता है। " [POSIX 'diff' 0 के साथ बाहर निकलता है जब फ़ाइलें समान होती हैं, 1 जब वे भिन्न होती हैं, और> 1 अन्यथा] (http://pubs.opengroup.org/onlinepubs/009696799/utilities/diff.html)। तो आप 2 मान नहीं सकते हैं, लेकिन 0 और 1 सुरक्षित हैं। –
@chus आप सही हैं। मैं अपना जवाब अपडेट करूंगा। –
मेरे मामले diff में 127 लौट आए, इसके लिए खोज की है और "विशेष अर्थ के साथ बाहर निकलें कोड"
127 "आदेश नहीं मिला" $ पथ या लिखने में कोई त्रुटि के साथ संभावित समस्या illegal_command tldp.org में मिल।
मैंने diff के लिए गलत पथ का उपयोग किया। :)
फ़ॉन्ट: tldp.org/LDP/abs/html/exitcodes.html
सहमत हुए, मैं स्रोतों की जाँच की है, और केवल बाहर निकलने के कोड EXIT_SUCCESS, EXIT_FAILURE (दोनों stdlib.h में परिभाषित) और EXIT_TROUBLE हैं , src/diffutils-3.0/system.h –
में परिभाषित किया गया है कि '--text' विकल्प दो (बड़ी) विभिन्न बाइनरी फाइलें होने पर मेरे STDOUT की गड़बड़ी करता है। –
मैं भी जीएनयू diffutils का उपयोग कर रहा हूँ लेकिन गलत आदमी पेज उद्धृत किया। –