हियरडॉक दृष्टिकोण बहुत अच्छा है, लेकिन आप इसे भोलेपन से उपयोग नहीं कर सकते:
मुद्दों
- रहे हैं साथ चिपकाया सामग्री में रिक्त स्थान और टैब, जो परदे पर पढ़ने के लिए कठिन हैं, और आपके पाठ संपादक
- की स्वत: सफाई कार्यों से शुरू हो रहा जा सकता है संरक्षण नहीं अंत के हियरडॉक मार्कर आप उपयोग चिपकाया में होती है सामग्री, ऑपरेशन होगा शुरुआती अंत - समस्या अगर सामग्री का अपना हेड्रोक है और 'ईओएफ' जैसे सामान्य मार्कर का उपयोग करता है।
इसका मतलब यह है एक अनुभवहीन हियरडॉक दृष्टिकोण सफल या सटीक सामग्री है कि में चिपकाया के आधार पर असफल हो सकता है। यही कारण है कि कम से कम विस्मय के सिद्धांत का उल्लंघन करता है और खतरनाक के बाद से अर्द्ध यादृच्छिक है।
मैं एक दृष्टिकोण जहां सामग्री पहले बेस 64 uuencode साथ कब्जा कर लिया है पसंद करते हैं। यह सामग्री के आधार पर विभिन्न व्यवहार की संभावना को समाप्त करता है, इसलिए आपको इसके बारे में कभी भी सोचना नहीं होगा।
सुरक्षित दृष्टिकोण:
- कब्जा करने के लिए सामग्री की पहचान करें, कहना whatever.sh
uuencode -m whatever.sh whatever.sh >tmp
- स्क्रिप्ट आवरण
- एक हियरडॉक मार्कर का प्रयोग करें में tmp की सामग्री चस्पा करें कि नहीं कर सकते बेस 64
अंतिम स्क्रिप्ट इस तरह दिखता है:
cat > file.tmp <<'_EOF'
begin-base64 644 whatever.sh
bHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMg
LWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxS
CmxzIC1sUgpscyAtbFIKbHMgLWxSCmxzIC1sUgpscyAtbFIKbHMgLWxSCmxz
IC1sUgpscyAtbFIK
====
_EOF
uudecode file.tmp
एक छोटी संभावना है कि यूएनकोडेड डेटा की कोई भी पंक्ति आपके हेरेडोक मार्कर से मेल खा सकती है। आप शायद 60 वर्णों वाले मार्करों का उपयोग नहीं करेंगे :) लेकिन आखिरी पंक्ति कम हो सकती है और संभावना है कि यूनेकोडेड सामग्री आपके मार्कर से गलती से मेल खा सकती है, जब तक कि मार्कर किसी चरित्र (अंडरस्कोर) का उपयोग न करे, जो नहीं हो सकता बेस 64 एन्कोडिंग में। _EOF
हमेशा सुरक्षित है।
ब्लॉक में शैल परिवर्तनीय विस्तार को रोकने के लिए '_EOF'
जैसे हेड्रोक मार्कर को उद्धृत करना भी समझदार है। मुझे नहीं लगता कि बेस 64 एन्कोडेड पेलोड कभी भी अनजाने में एक शेल वैरिएबल का संदर्भ दे सकता है क्योंकि $
बेस 64 में उपयोग नहीं किया जाता है, लेकिन उद्धरण इस संभावना को समाप्त करता है। यह हेड्रोक मार्कर को हमेशा उद्धृत करने की आदत को स्थापित करने में भी मदद करता है जब तक कि कोई कारण नहीं है कि आप खोल विस्तार चाहते हैं। यह एक और सामग्री-निर्भर व्यवहार है जो स्पष्ट रूप से यादृच्छिक रूप से मुश्किल है। हमेशा अपने हेरेडोक मार्कर को उद्धृत करें जबतक कि आप नहीं जानते कि आप सामग्री ब्लॉक के भीतर खोल विस्तार चाहते हैं!
उपरोक्त एक मैन्युअल प्रक्रिया है। टेम्पलेट्स का उपयोग करके इसे स्वचालित करना आसान है।
स्रोत
2012-07-07 23:56:02
क्या आप बस 'बिल्ली स्क्रिप्ट> tmp' नहीं कर सकते? – Saphrosit