मैं सोलारिस 10 पर हूं और मैंने ksh (88), बैश (3.00) और zsh (4.2.1) के साथ निम्नलिखित परीक्षण किया है।
निम्नलिखित कोड कोई परिणाम नहीं देता है:
function foo {
echo "Hello World"
}
find somedir -exec foo \;
यह खोज कई फाइलों से मेल खाती है (जैसा कि इसके -exec ...
साथ बदलकर दिखाया गया है -print
), और find
कॉल से बाहर बुलाए जाने पर फ़ंक्शन पूरी तरह से काम करता है ।
यहाँ man find
पृष्ठ के बारे में क्या कहना है -exec
:
-exec कमांड सही है यदि निष्पादित कमांड देता है a बाहर निकलने की स्थिति के रूप में शून्य मान। का अंत कमांड को बचकर भाग जाना चाहिए अर्धविराम (;) एक कमांड तर्क {} है वर्तमान पथनाम द्वारा प्रतिस्थापित। अगर द अंतिम तर्क के लिए -exec {} और आप हैं अर्धविराम (;) के बजाय निर्दिष्ट करें + कम समय के लिए आदेश दिया जाता है {{रास्ते के समूहों द्वारा प्रतिस्थापित। अगर आदेश का कोई भी आह्वान एक रिटर्न देता है बाहर निकलने की स्थिति के रूप में गैर-शून्य मान, ढूंढें एक गैर-शून्य निकास स्थिति लौटाता है।
मैं शायद कुछ इस तरह से कर सकता हूँ:
for f in $(find somedir); do
foo
done
लेकिन मैं क्षेत्र विभाजक मुद्दों से निपटने से डरता हूं।
क्या एक कॉल से शेल फ़ंक्शन (उसी स्क्रिप्ट में परिभाषित किया गया है, चलो स्कूपिंग मुद्दों से परेशान नहीं होते) संभव है find ... -exec ...
?
मैंने इसे दोनों के साथ आजमाया /usr/bin/find
और /bin/find
वही परिणाम मिला।
PATH
। वैकल्पिक रूप से, उपयोग करें sh -c '...'
और दोनों ...
बिट में फ़ंक्शन को परिभाषित और चलाते हैं । यह कार्यों और लिपियों के बीच के अंतर को समझने में मदद कर सकता है ।
export -f foo