बश फ़ंक्शन के अंदर एक हेरेडोक का उपयोग कैसे करें?


12

क्या बैश फ़ंक्शन के अंदर एक हेरेडोक सम्मिलित करना संभव है ?

त्रुटि में परिणाम के नीचे का तुच्छ नमूना: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

वातावरण:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8- सर्वर x86_64)
  • GNU बैश, संस्करण 4.2.8 (1) -release (x86_64-pc-linux-gnu)

मैं इस धारणा के तहत था कि हेरेडोक एक पर्ल चीज थी। क्या यह विश्वास करने का कोई कारण है कि यह BASH में काम करेगा?
jdw

@jdw, यहाँ डॉक्स बैश सहित कई भाषाओं में मौजूद हैं।
जोर्डेचे

मैं अब वही देखता हूं। ठंडा।
jdw

जवाबों:


10

आपका कोड मुझे ठीक लगा, इसलिए मैंने इसे लाइन के लिए कॉपी किया और इसने मेरे लिए काम किया:

  • OSX 10.7, bash 3.2.48 (1) -release (x86_64-apple-darwin11)।
  • Ubuntu 10.04.3, बैश 4.1.5 (1) -release (x86_64-pc-linux-gnu)

क्या आपके लिए यह संभव है कि आप फ़ाइल को केवल इस बात के लिए तैयार करें कि आप गायब नहीं हैं या रिक्त स्थान / टैब / आदि जोड़ नहीं रहे हैं?

इसके अलावा, आप इसे कैसे निष्पादित कर रहे हैं? मैंने किया chmod +x test.shऔर फिर./test.sh

संपादित करें: जब मैं समापन HEREDOC के साथ लाइन की शुरुआत में एक स्थान जोड़ता था, तो मुझे आपके समान त्रुटि मिली।

आगे नोट: समापन के पीछे एक अनुगामी स्थान HEREDOCभी इसका कारण बन सकता है


1
अजीब, यह अब काम करता है ... विम रंग वाक्यविन्यास ने HEREDOC को पहचानने से पहले हाइलाइट किया (यह नहीं है कि यदि आप HEREDOC से पहले उस स्थान को जोड़ते हैं) तो मैंने मूल स्क्रिप्ट को केवल एक बाहरी फ़ाइल का उपयोग करने के लिए संशोधित किया है, इसलिए मुझे यकीन नहीं है कि क्या गलत था। यह heredocs के साथ बहुत अधिक सुविधाजनक होगा, हालांकि!
लेफ्टियम

1
वास्तव में! मुझे मुझसे कुछ heredocs प्यार है।
डेविड

1
अतिरिक्त रूप से: समापन के पीछे एक अनुगामी स्थान HEREDOCभी इसका कारण बन सकता है (इस तरह की त्रुटियां वास्तव में नीचे ट्रैक करने के लिए कठिन हैं।)
0laf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.