दो मुख्य बातें आप को पता है जब मेकअप व्यंजनों में गैर तुच्छ खोल टुकड़े डाल की जरूरत है: (! निश्चित रूप से)
नुस्खा में
आदेश हैं एक समय में एक है, जहां आदेश निष्पादित का अर्थ है "नुस्खा में टैब-प्रीफिक्स्ड लाइन", संभवतः बैकस्लाश के साथ कई मेकफ़ाइल लाइनों पर फैलती है।
तो आपका खोल टुकड़ा सभी को एक (संभावित रूप से बैकस्लेश) लाइन पर लिखा जाना चाहिए। इसके अलावा यह एक सिंगल लाइन के रूप में खोल को प्रभावी ढंग से प्रस्तुत किया जाता है (बैकस्लेश-न्यूलाइन सादे न्यूलाइन नहीं हैं इसलिए शेल द्वारा कमांड टर्मिनेटर के रूप में उपयोग नहीं किया जाता है), इसलिए इस तरह से वाक्य रचनात्मक रूप से सही होना चाहिए।
दोनों खोल चर और चर बनाने डॉलर चिह्न ([email protected]
, $i
) द्वारा शुरू की गई हैं, ताकि आप उन्हें $$i
के रूप में लिख कर मेकअप से अपने खोल चर को छिपाने के लिए की जरूरत है। एक खोल स्क्रिप्ट में (दरअसल, किसी भी डॉलर पर हस्ताक्षर आप $$
के रूप में यह लिख कर खोल के द्वारा देखा जा करने के लिए कर से भाग जाना चाहिए चाहते हैं।)
आम तौर पर आप अलग पंक्ति में अलग आदेशों लिखते थे, लेकिन यहाँ आप प्रभावी रूप से केवल एक पंक्ति प्राप्त करते हैं, इसलिए अलग-अलग शेल कमांड को अर्धविराम के साथ अलग करना चाहिए। आपके उदाहरण के लिए इस सबको एक साथ रखें पैदा करता है:
foo: bar
for i in `find [email protected] -name *_cu.*`; do mv $$i "$$(echo $$i|sed s/_cu//)"; done
या समतुल्य:
foo: bar
for i in `find [email protected] -name *_cu.*`; do \
mv $$i "$$(echo $$i|sed s/_cu//)"; \
done
सूचना कि बाद, भले ही यह readably कई लाइनों पर बाहर रखी है, रखने के लिए अर्धविराम का एक ही सावधान उपयोग की आवश्यकता है खोल खुश
स्रोत
2012-01-06 12:28:58
ऑफ विषय: खोज आदेश के भीतर '' * _cu। * '' उद्धृत करना एक अच्छा विचार होगा, जैसा कि आप चाहते हैं कि खोज द्वारा विस्तारित किया गया हो, न कि खोज का आह्वान करने वाला खोल। –
इस कमांड का ट्रिगरिंग आपके लक्ष्य के रूप में इस '$ @' के साथ सही काम नहीं करेगा। – reinierpost