मेरे पास एक शेल स्क्रिप्ट है जिसे मैं शुनिट के साथ परीक्षण करना चाहता हूं। स्क्रिप्ट (और सभी फ़ंक्शंस) एक फ़ाइल में हैं क्योंकि यह इंस्टॉलेशन को अधिक आसान बनाता है।शैल स्क्रिप्ट से फ़ंक्शन आयात करना
के लिए उदाहरण script.sh
#!/bin/sh
foo() { ... }
bar() { ... }
code
मैं (है कि वितरित किया गया और स्थापित करने की जरूरत नहीं है)
run_tests.sh
#!/bin/sh
. script.sh
# Unit tests
तरह कार्यों
script.sh
में परिभाषित किया गया परीक्षण करने के लिए एक दूसरे फ़ाइल लिखना चाहते थे
अब समस्या .
(या) में निहित है बैश में)। यह न केवल फ़ंक्शन परिभाषाओं को पार्स करता है बल्कि स्क्रिप्ट में कोड निष्पादित करता है।
कोई तर्क के साथ स्क्रिप्ट के बाद से बुरा कुछ नहीं करता है मैं कर सकता
. script.sh > /dev/null 2>&1
लेकिन यदि मेरा लक्ष्य को प्राप्त करने के लिए एक बेहतर तरीका है मैं भटक रहा था।
संपादित
मेरे प्रस्तावित वैकल्पिक हल के मामले में काम नहीं करता है sourced स्क्रिप्ट कॉल exit
तो मैं जाल को
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
...
}
. script.sh
run_tests
समारोह कहा जाता है से बाहर निकलें है लेकिन जैसे ही मैं पुनः प्रेषण स्रोत कमांड का आउटपुट स्क्रिप्ट में फ़ंक्शंस को पार्स नहीं किया जाता है और ट्रैप हैंडलर
यह काम करता है लेकिन मुझे आउटपुट मिलता है script.sh
की ut:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh
यह आउटपुट मुद्रित नहीं करता, लेकिन मैं एक त्रुटि है कि कार्य निर्धारित नहीं है मिलती है:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh | grep OUTPUT_THAT_DOES_NOT_EXISTS
यह आउटपुट और run_tests
जाल हैंडलर प्रिंट नहीं करता नहीं बुलाया जाता है सब पर:
#!/bin/sh
trap run_tests ERR EXIT
run_tests() {
function_defined_in_script_sh
}
. script.sh > /dev/null
आप चाहते हो सकता है के लिए 'shift' तर्क सूची तो' 'main' --source के साथ संपर्क में नहीं मिलता है -ऑनली ' –
@ हबर्टग्रेज़कोवियाक अच्छा बिंदु, तय। सलाह के लिये धन्यवाद! – andrewdotn
'शिफ्ट' वहां समझ में नहीं आता है, क्योंकि 'मुख्य' केवल तभी चलता है जब '- स्रोत-केवल' ** ** पहला तर्क नहीं है। –