2012-11-12 11 views
5

मैंने उम्र में शेल स्क्रिप्टिंग का उपयोग नहीं किया है। मैं मदद के लिए ऑनलाइन खोज की है, लेकिन पर्याप्त गाइड नहीं मिला है ..एक सरल खोल स्क्रिप्ट को समझने में समस्या

यहाँ कोड मैं समझने की कोशिश कर रहा हूँ है: run_out

#!/bin/sh 
# -*-sh-*- 
if gcc $1 &> cmp_out; then 
    if ! ./a.out &> run_out; then 
     exit 0;     # Success. 
    fi 
fi 
exit 1;       # Failure. 

cmp_out क्या है, और? क्या ये std_out हैं?

मुझे पता है कि &> एक पुनर्निर्देशन निर्देश है। लेकिन मुझे थोड़ी सी बिट में इस स्क्रिप्ट सिंटैक्स में इसका अर्थ नहीं मिलता है।

मैं इस स्क्रिप्ट के बारे में एक उच्च स्तरीय अवलोकन की तलाश में हूं। अगर आपको इस स्क्रिप्ट का उपयोग करने के बारे में अधिक जानकारी चाहिए तो मुझे बताएं। मैं इसके बारे में और अधिक शामिल करूंगा।

संक्षेप में यह डेल्टा डिबगिंग (//www.st.cs.uni-saarland.de/dd/)

+0

'cmp_out' संकलन से आउटपुट है, 'run_out' परिणामी निष्पादन योग्य चलाने से आउटपुट है। –

+0

वे फाइल आउटपुट को रीडायरेक्ट कर रहे हैं। – John3136

+1

तर्क थोड़ा मजाकिया है: यदि a.out में शून्य-शून्य निकास स्थिति है, तो यह सफलता है? –

उत्तर

1

यह स्क्रिप्ट एक तर्क फ़ाइल, स्रोत फ़ाइल का नाम लेती है। यह gcc के साथ उस स्रोत फ़ाइल को संकलित करता है और यदि वह संकलन सफल होता है तो यह परिणाम निष्पादित करता है। (डिफ़ॉल्ट रूप से, gcca.out नाम की एक फ़ाइल के रूप में निष्पादन योग्य लिखते हैं।)

संकलन में विफल रहता है, तो आप भाग्यशाली हैं, क्योंकि स्क्रिप्ट उत्पादन (दोनों मानक आउटपुट और मानक त्रुटि) cmp_out नामक एक फाइल में बचत होती है। और यदि निष्पादित परिणाम किसी भी आउटपुट का उत्पादन करता है, तो यह run_out में सहेजता है। स्क्रिप्ट स्वयं stderr या stdout के लिए कुछ भी लिखता है। भले ही gcc नहीं मिला है, तो यह त्रुटि cmp_out में समाप्त हो जाएगी।

स्क्रिप्ट के बारे में अजीब बात यह है कि यह if के बाद विस्मयादिबोधक बिंदु का उपयोग करके निष्पादन की निकास स्थिति को बदल देता है। यदि a.out निष्पादित करने में विफल रहता है, तो स्क्रिप्ट 0, सफलता से निकलती है। यदि a.out सफल होता है, तो स्क्रिप्ट 1, विफलता से निकलती है, जो संकलन विफल होने पर भी ऐसा करता है। शायद विस्मयादिबोधक बिंदु एक त्रुटि है? पूर्णांक के बाद अर्धविराम अनावश्यक है।

+0

यह "डेल्टा डिबगिंग" पैकेज से है जिसका उपयोग सीएस कक्षाओं में किया जाता है। यदि कोई इनपुट विफलता का कारण बनता है, तो इसे "सफल" परीक्षण केस माना जाता है। http://delta.stage.tigris.org/using_delta.html – dana

2

> एक नाम की फ़ाइल के लिए पूर्ववर्ती आदेश के मानक उत्पादन पुनर्निर्देश के शामिल उदाहरण है। &> मानक आउटपुट और मानक त्रुटि दोनों को रीडायरेक्ट करता है।

तो cmp_out एक फ़ाइल नाम है जो संकलक से मानक आउटपुट और मानक त्रुटि आउटपुट प्राप्त करेगा। run_outa.out से मानक आउटपुट और मानक त्रुटि प्राप्त करता है (शायद gcc कमांड द्वारा बनाया गया बाइनरी)।

1

प्रोग्राम में एक बग भी है, जिसमें "&>" का शॉर्टंड सिंटैक्स एक बाश चीज है, और नियमित शेल में काम नहीं करता है। यह पहली पंक्ति के लिए "#!/बिन/बैश" होना चाहिए।

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