के अलावा कोई आवश्यक उपकरण नहीं /bin/sh
। फॉर्म की टेम्प्लेट फाइल दी
Version: ${version}
Path: ${path}
या मिश्रित शेल कोड के साथ भी शामिल है
Version: ${version}
Path: ${path}
Cost: ${cost}\$
$(i=1; for w in one two three four; do echo Param${i}: ${w}; i=$(expr $i + 1); done)
और एक खोल पार्स करने योग्य कॉन्फ़िगरेशन फ़ाइल की तरह
version="1.2.3-r42"
path="/some/place/under/the/rainbow/where/files/dance/in/happiness"
cost="42"
इसका विस्तार करना एक साधारण बात है
Version: 1.2.3-r42
Path: /some/place/under/the/rainbow/where/files/dance/in/happiness
Cost: 42$
Param1: one
Param2: two
Param3: three
Param4: four
वास्तव में, शेल चर में कॉन्फ़िगरेशन फ़ाइल के config_file
लिए पथ और टेम्पलेट फ़ाइल में पथ को देखते हुए template_file
, आपको केवल इतना करना है:
. ${config_file}
template="$(cat ${template_file})"
eval "echo \"${template}\""
यह संभवत: टेम्पलेट फ़ाइल (@ mtinberg के समाधान) के रूप में पूर्ण शेल स्क्रिप्ट होने की तुलना में पूर्ववर्ती है।
पूरा अनुभवहीन टेम्पलेट विस्तारक कार्यक्रम:
#!/bin/sh
PROG=$(basename $0)
usage()
{
echo "${PROG} <template-file> [ <config-file> ]"
}
expand()
{
local template="$(cat $1)"
eval "echo \"${template}\""
}
case $# in
1) expand "$1";;
2) . "$2"; expand "$1";;
*) usage; exit 0;;
esac
यह मानक आउटपुट के विस्तार का उत्पादन करेगा; मानक आउटपुट को किसी फ़ाइल में पुनर्निर्देशित करें या वांछित आउटपुट फ़ाइल का उत्पादन करने के लिए स्पष्ट फैशन में उपरोक्त को संशोधित करें।
कैविट्स: यदि फ़ाइल में दोहरे उद्धरण चिह्नों ( "
) का समावेश है तो टेम्प्लेट फ़ाइल विस्तार काम नहीं करेगा । सुरक्षा कारणों से, हमें संभवत: कुछ स्पष्ट संन्यास जांचों को शामिल करना चाहिए या इससे भी बेहतर, यदि शेल फ़ाइल बाहरी इकाई द्वारा बनाई गई है, तो शेल एस्केपिंग ट्रांसफॉर्मेशन करें।