क्या ब्रश __DATA__
जैसे कुछ बैश के लिए है? मेरा मतलब यह सुविधा है कि __DATA__
के बाद कोड निष्पादित नहीं किया जाएगा।क्या ब्रश __DATA__ की तरह कुछ है?
उत्तर
शैल स्क्रिप्ट को निष्पादित करते समय लाइन-दर-रेखा आधार पर पार्स किया जाता है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि निष्पादन उस डेटा तक कभी न पहुंच जाए जो आप संरक्षित करना चाहते हैं। आप ऐसा कर सकता है, उदाहरण के लिए:
# Some shell code...
exit
[data (possibly binary) goes here]
वास्तव में पढ़ने के लिए अपनी स्क्रिप्ट से इस डेटा, आपको कुछ एसईडी जादू का उपयोग कर सकते पहली पंक्ति केवल __DATA__
युक्त के बाद सब कुछ निकालने के लिए तो है कि sed के उत्पादन की दुकान एक चर में। एक
$ ./test-data.sh
FOO BAR BAZ
LLAMA DUCK COW
सभी पर्ल की '__DATA__ "सबसे पहले pragma है:
#!/bin/sh
data=$(sed '0,/^__DATA__$/d' "$0")
printf '%s\n' "$data"
exit
__DATA__
FOO BAR BAZ
LLAMA DUCK COW
आप test-data.sh
रूप में इस स्क्रिप्ट को बचाने और यह निष्पादन योग्य बनाने के लिए, आप इसे चलाने के लिए और निम्नलिखित उत्पादन प्राप्त कर सकते हैं: यहाँ एक उदाहरण है फ़ाइल निर्दिष्ट किए बिना $ _ में इनपुट की आपूर्ति करने का तरीका। बैश में कोई समकक्ष नहीं है क्योंकि इसमें $ _ के समान कुछ नहीं है। हालांकि आप सीधे डैश इत्यादि का उपयोग करते हुए स्पष्ट सेटिंग वैरिएबल जैसे अन्य तरीकों से डेटा की आपूर्ति कर सकते हैं।
हालांकि मुझे विश्वास नहीं है कि आप यही करना चाहते हैं। ऐसा कुछ प्रकार की ब्लॉक टिप्पणी विधि के बाद लगता है। क्या यह मामला है?
हां, लेकिन दूसरा हिस्सा भी दिलचस्प है। तो मैं बाहर निकलने के समाधान को स्वीकार करूंगा हालांकि यह __DATA__ जितना अच्छा नहीं है क्योंकि __DATA__ के बाद कोई और वाक्यविन्यास-हाइलाइटिंग नहीं है और __DATA__ स्वयं बाहर निकलने के बजाय कोड में अधिक दिखाई दे रहा है। डेटा की आपूर्ति के लिए मैं शायद यहां एक दस्तावेज़ हूं क्योंकि बीटीसी के प्रस्ताव से याद रखना आसान है। –
हां, हेड्रोक का उपयोग करना लगभग निश्चित रूप से एक स्क्रिप्ट को बड़ी मात्रा में डेटा की आपूर्ति के लिए सबसे अच्छा समाधान है। एकमात्र बार जब मैं अपने समाधान (अवधारणा के सबूत के अलावा) का उपयोग करता हूं तो मुझे एक शेल स्क्रिप्ट में डेटा को आसानी से शामिल करने की क्षमता की आवश्यकता होती है, जिसमें संभावित रूप से हेड्रोक टर्मिनेटर शामिल हो सकता है। – bcat
आईआईयूसी, स्पष्ट रूप से चर सेट करने और हेड्रॉक्स का उपयोग करने से आपके डेटा के बीच में आपका डेटा सही स्मैक डैब होने का असर होगा। __DATA__ तकनीक अंत में उस डेटा को रखेगी ताकि आप संदर्भ में बाधा के बिना कोड पढ़ सकें। आईएमओ, डेटा के लिए इसका उपयोग इष्टतम नहीं है। बाहरी स्रोत से पढ़ने के लिए बेहतर है। लेकिन, यह एक स्व-दस्तावेज परीक्षण के लिए उपयुक्त हो सकता है। मैं केवल ऊपर के रूप में USAGE कथन के लिए इसका उपयोग करता हूं। – mpersico
यह एक उपयोगी तकनीक है यदि आप अपनी स्क्रिप्ट के लिए उपयोग जानकारी प्रदान करना चाहते हैं, लेकिन सहायता टेक्स्ट के साथ कोड की मुख्य पंक्ति को अव्यवस्थित नहीं करना चाहते हैं। यदि आप एक से अधिक बार उपयोग का संदर्भ देना चाहते हैं तो यह भी बढ़िया है। बुद्धि के लिए, मेरा एक खोल स्क्रिप्ट से एक टुकड़ा:
...
declare OPTSARGS
OPTSARGS=$(getoptp -o wh --long nopager,help -n myScript-- "[email protected]")
status=$?
if ((status != 0))
then
printf '%s\n' "$(sed '0,/^__USAGE__$/d' $0)"
exit $status
fi
eval set -- "$OPTSARGS"
while true
do
case "$1" in
-w) diffargs="$diffargs -w"; shift;;
--nopager) pager=cat; shift;;
--) shift; break ;; ## end of opts, remaining $*, if any, are args
-h | --help)
printf '%s\n' "$(sed '0,/^__USAGE__$/d' $0)"
exit 0;;
*)
echo "Internal error!"
printf '%s\n' "$(sed '0,/^__USAGE__$/d' $0)"
exit 1;;
esac
done
...
echo "Done"
exit 0
__USAGE__
myScript [-w] [--nopager] [file [file...] ]
Some description goes here.
-w - Do not compare whitespace
--nopager - Do not pass the output through 'less'
- 1. क्या पीएमएक्स इंडेक्स की तरह कुछ है?
- 2. क्या जावास्क्रिप्ट में PHP की preg_replace_callback() की तरह कुछ है?
- 3. क्या सीएसएस में jQuery की तरह कुछ है: है()?
- 4. jQuery.extend() लेकिन कुछ स्टैंडअलोन की तरह कुछ?
- 5. ब्रश टू ब्रश एनीमेशन
- 6. क्या रूबी में नल-स्ट्रीम की तरह कुछ है?
- 7. क्या एंड्रॉइड विकास में टाइमस्पेन की तरह कुछ है?
- 8. क्या जावा में मॉलोक/फ्री की तरह कुछ है?
- 9. गिट: क्या प्रति-शाखा टैग की तरह कुछ है?
- 10. क्या मोंगोडीबी हेडिसक्ल या phpmyadmin की तरह कुछ है?
- 11. क्या Python निर्यात की तरह कुछ भी है?
- 12. क्या कोडइग्निटर फ्रेमवर्क पर मास्टरपेज की तरह कुछ भी है?
- 13. क्या जावा में एनोटेशन विरासत की तरह कुछ है?
- 14. क्या ऑटो लाइन-ऊंचाई की तरह कुछ है?
- 15. क्या पर्ल में जावा/PHP डॉक्स की तरह कुछ है?
- 16. क्या कोई कार्यात्मक मॉडल की तरह कुछ है?
- 17. क्या Verilog में __LINE__ की तरह कुछ है?
- 18. क्या लिनक्स के लिए डब्लूएमआई की तरह कुछ है?
- 19. क्या लुआ में पॉइंटर्स की तरह कुछ भी है?
- 20. क्या jQuery.toggle (बूलियन) की तरह कुछ मौजूद है?
- 21. क्या .NET के लिए जेआरबेल की तरह कुछ भी है?
- 22. क्या सी # के लिए अजगर सजावट की तरह कुछ है?
- 23. क्या हास्केल के लिए इंकेंटर की तरह कुछ है?
- 24. क्या जावास्क्रिप्ट में% d की तरह कुछ है?
- 25. क्या जावा के लिए CHESS की तरह कुछ मौजूद है?
- 26. क्या विंडोज में लिनक्स पट्रस सिस्कल की तरह कुछ है?
- 27. क्या F # हैस्केल की तरह कुछ भी खंड है?
- 28. क्या सी # में पायथन के गेटैटर() की तरह कुछ है?
- 29. क्या ActiveRecord (Rails) में create_view की तरह कुछ भी है?
- 30. क्या पर्ल 6 पर्ल 5 के __DATA__ और __END__ सेक्शन के बराबर कुछ समर्थन करता है?
इस शांत है, कर सकते हैं किसी कृपया समझा कि यह कैसे काम करता है? मुझे समझ नहीं आया 'डेटा = $ (sed '0,/^ __ आंकड़े __ $/d'" $ 0 ")' – rodee
भागो 'sed' आदेश और लाइन 0 से लाइन है कि __DATA__ मेल खाता है, लाइन को हटा दें। बाकी प्रिंट करेंगे। $ 0 यह स्क्रिप्ट है, पढ़ने के लिए फ़ाइल जिसमें डेटा है। – mpersico
सावधान, यद्यपि; यदि आप अपनी स्क्रिप्ट में सोर्सिंग कर रहे हैं, न केवल इसे चला रहे हैं, तो '$ 0' आपका खोल नाम है और आपका' एक्जिट 'आपके पूरे सत्र से बाहर निकल जाएगा। '$ {' को' $ {BASH_ARGV [0]} 'और 'वापसी' के साथ' निकास' के साथ बदलें। – mpersico