टी एल; डॉ; आप एक बहु-पंक्ति YAML स्केलर (पठनीयता के लिए) का उपयोग करना चाहते हैं जो कि सिंगल लाइन स्ट्रिंग के रूप में लोड किया गया है जिसे गिटलैब-सीआई द्वारा एक कमांड के रूप में जारी किया जा सकता है। ऐसा करने के लिए YAML में एक सादा (बिना उद्धरण के) स्केलर का उपयोग करें जो कई लाइनों में फैला हुआ है:
script:
- echo -e
"echo 'hi';
echo 'bye';"
कृपया ध्यान रखें कि ऐसे स्केलर पर YAML द्वारा लगाए गए कुछ प्रतिबंध हैं। आपको निश्चित रूप से यह जानने की जरूरत है कि प्रत्येक निम्न पंक्ति कम से कम एक स्थिति की तुलना में echo -e
(जो इसके संग्रह नोड के सापेक्ष दो स्थिति है, जो सभी में इंडेंट नहीं है), और यह कि प्रत्येक नई-लाइन को एक स्थान से बदल दिया जाता है जब लोड किया जाता है (तो आपको नई देखभाल करने के लिए थोड़ा ध्यान रखने की आवश्यकता है)।
आपकी पोस्ट में कई गलत धारणाएं हैं, जो आपको गलत प्रश्न पूछती हैं।
मल्टी-लाइन YAML स्ट्रिंग जैसी कोई चीज नहीं है । YAML में स्केलर होते हैं और इनमें से कुछ स्केलर को प्रोग्राम द्वारा स्ट्रिंग्स के रूप में लोड किया जा सकता है, जबकि कुछ अन्य को पूर्णांक, फ्लोट्स आदि के रूप में लोड किया जाएगा।
आप स्पष्ट रूप से स्केलर नोड्स में रुचि रखते हैं जिन्हें एक स्ट्रिंग के रूप में लोड किया जा रहा है, क्योंकि उस स्ट्रिंग को तब कमांड-लाइन के रूप में व्याख्या किया जा सकता है। लेकिन आप मल्टी-लाइन कमांड-लाइन नहीं चाहते हैं (यानी एम्बेडेड नईलाइन के साथ), क्योंकि मल्टी-लाइन स्क्रिप्ट गीतालाब सीआई (@Jordan संकेत के रूप में) में समर्थित नहीं हैं।
पठनीयता के लिए आप मल्टी लाइन स्केलर को सिंगल लाइन स्ट्रिंग के रूप में लोड करने के लिए YAML की मानक, मानक, क्षमता का उपयोग करना चाहते हैं।
यदि आप पठनीयता की परवाह नहीं करते हैं तो आप इसका उपयोग कर सकते हैं:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
और जब से आपके स्केलर को उद्धृत नहीं किया जाता है (अर्थात इसके साथ शुरू होता है echo
) आपको बैकस्लैश या उद्धरण के लिए YAML में कुछ विशेष करने की आवश्यकता नहीं है।
स्क्रिप्ट का परिणाम एक ही है (एक खाली लाइन को प्रिंट echo 'hi';
करें, एक लाइन पर प्रिंट करें चार इंडेंटेड, echo 'bye';
एक लाइन पर प्रिंट करें इंडेंट किए गए रिक्त स्थान पर प्रिंट करें ।)
यदि आप पठनीयता के लिए मल्टी-लाइन इनपुट का उपयोग करना चाहते हैं, जिसे एक ही लाइन के रूप में लोड किया गया है, तो अनिवार्य रूप से दो विकल्प हैं: मल्टी-लाइन प्लेन स्केलर का उपयोग करें या अपने YAML में एक मुड़ा हुआ स्केलर का उपयोग करें।
मल्टी लाइन प्लेन स्केलर
सादे का मतलब है कि स्केलर गैर-उद्धृत है, और जैसा कि YAML मल्टी-लाइन में किसी भी मल्टी-लाइन चीज़ के साथ होता है, निम्नलिखित पंक्तियों को उचित रूप से इंडेंट करने की आवश्यकता होती है, इस मामले में प्रारंभिक लाइन की तुलना में आगे
script:
- echo -e
"echo 'hi';
echo 'bye';"
नए स्थान रिक्त स्थान द्वारा प्रतिस्थापित किए जाते हैं इसलिए ऐसा न करें:
script:
- echo -e
"echo 'hi';
echo '
bye';"
जैसा कि आपको पहले एक दृश्यमान स्थान मिलेगा bye
।
इस तरह के कुछ प्रतिबंध हैं कि आपके पास इस तरह के स्केलर के भीतर एक स्थान के बाद एक बृहदान्त्र नहीं हो सकता है (जिससे यह कुंजी-मूल्य जोड़ी की तरह दिखाई देगा)।
सादे स्केलर में बैकस्लैश से बचने की कोई आवश्यकता नहीं है, क्योंकि आप किसी भी स्केलर में किसी भी वर्ण से बच नहीं सकते हैं, लेकिन निश्चित रूप से आप बैकस्लैश को शामिल कर सकते हैं, जो कि YAML से लोड किए गए स्ट्रिंग में समाप्त हो जाएगा और कमांड निष्पादित के लिए अर्थ हो सकता है उस तार से।
मुड़ा हुआ अदिश
एक मुड़ा हुआ स्केलर एक सादे स्केलर के समान होता है जिसमें लोडिंग के दौरान सभी (एकल) न्यूलाइन्स को एक स्थान द्वारा प्रतिस्थापित किया जाता है:
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
आपको वास्तविक कमांड की जानकारी को कम से कम तह किए गए स्केलर संकेतक ( >
) के रूप में इंडेंट करने की आवश्यकता है ।
सादे स्केलर के विपरीत चीजों :
का कोई विशेष अर्थ नहीं है। इसलिए अगर मैदानी स्केलर एक YAML त्रुटि को फेंकने में विफल होते हैं, तो समान रूप से मुड़े हुए स्केलर सबसे अधिक नहीं होंगे।
\
अपनी रेखाओं को जोड़ने की कोशिश कर सकते हैं, लेकिन मैं यह नहीं कह सकता कि यह काम करेगा या नहीं।