बिना मेरे पास एक स्क्रिप्ट है जो केवल stdout
पर डेटा लिखती है। मुझे इसे कई फाइलों के लिए चलाने और प्रत्येक इनपुट फ़ाइल के लिए एक अलग आउटपुट फ़ाइल उत्पन्न करने की आवश्यकता है और मैं सोच रहा था कि इसके लिए find -exec
का उपयोग कैसे करें। इसलिए मैं मूल रूप से इस बात का कई वेरिएंट की कोशिश की (मैं सिर्फ testability प्रयोजनों के लिए cat
द्वारा स्क्रिप्ट की जगह):find -exec के साथ stdout को रीडायरेक्ट करना और नया खोल
लगता है * प्रकार -exec बिल्ली च "{}"> "{} .stdout" \;
लेकिन यह काम नहीं कर सका क्योंकि सभी डेटा को एक फ़ाइल में लिखा जा रहा था जिसका शाब्दिक नाम {}.stdout
है।
आखिरकार, मैं इसके साथ काम कर सकता है:
खोज * प्रकार च -exec श -c "बिल्ली {}> {} .stdout" \;
लेकिन जब इस नवीनतम रूप cat
साथ अच्छी तरह से काम करता है, मेरी स्क्रिप्ट की आवश्यकता है वातावरण चर कई आरंभीकरण स्क्रिप्ट के माध्यम से भरी हुई है, इस प्रकार मैं के साथ अंत:
खोज * प्रकार च -exec श -c " initscript1; initscript2; ...; myscript {}> {} .stdout "\;
जो कचरा लगता है क्योंकि मेरे पास मेरे वर्तमान खोल में पहले से ही सबकुछ शुरू हुआ है।
क्या find
के साथ ऐसा करने का कोई बेहतर तरीका है? अन्य एक-लाइनर का स्वागत है।
यदि वे आपके मूल खोल में प्रारंभ होते हैं, लेकिन उपशीर्षक में सेट नहीं होते हैं, तो वे पर्यावरण चर नहीं होते हैं। अपनी initscripts के शीर्ष पर 'set -a' लिखें। –
क्या अंतिम उदाहरण आप सही देते हैं, या आदेश है: 'ढूंढें। -type f -exec sh -c "। initscript1; initscript2; ...; myscript {}> {} .stdout" \; '(केवल 'initscript1' का आह्वान करने के बजाय, क्या आप वास्तव में' initscript1' को कॉल कर रहे हैं, यानी आप डॉट कमांड के साथ फ़ाइल को सोर्स कर रहे हैं)। –