यहाँ दस्तावेज़
हमने अपने टेक्स्ट को आउटपुट करने के दो अलग-अलग तरीकों को देखा है, दोनों का उपयोग करते हुए गूंज कॉम
मैंड. एक तीसरा तरीका है जिसे a कहा जाता है यहाँ दस्तावेज़ or यहाँ स्क्रिप्ट. यहां दस्तावेज़ I/O पुनर्निर्देशन का एक अतिरिक्त रूप है जिसमें हम टेक्स्ट के एक भाग को अपनी स्क्रिप्ट में एम्बेड करते हैं और इसे कमांड के मानक इनपुट में फीड करते हैं। यह इस तरह काम करता है:
आदेश << टोकन
टेक्स्ट
टोकन
जहां आदेश कमांड का नाम है जो मानक इनपुट स्वीकार करता है और टोकन एक स्ट्रिंग है जिसका उपयोग एम्बेडेड टेक्स्ट के अंत को इंगित करने के लिए किया जाता है। हम यहां दस्तावेज़ का उपयोग करने के लिए अपनी स्क्रिप्ट को संशोधित करेंगे:
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम
शीर्षक='$HOSTNAME के लिए सिस्टम सूचना रिपोर्ट' CURRENT_TIME=$(दिनांक +'%x %r %Z')
TIMESTAMP='$USER द्वारा $CURRENT_TIME जेनरेट किया गया'
बिल्ली << _EOF_
$शीर्षक
$शीर्षक
$टाइमस्टैम्प
_ईओएफ_
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम
शीर्षक='$HOSTNAME के लिए सिस्टम सूचना रिपोर्ट' CURRENT_TIME=$(दिनांक +'%x %r %Z')
TIMESTAMP='$USER द्वारा $CURRENT_TIME जेनरेट किया गया'
बिल्ली << _EOF_
$शीर्षक
$शीर्षक
$टाइमस्टैम्प
_ईओएफ_
के बजाय का उपयोग करने का गूंज, हमारी स्क्रिप्ट अब उपयोग करती है बिल्ली और यहाँ एक दस्तावेज़। डोर _ईओएफ_ (जिसका अर्थ है "फ़ाइल का अंत," एक सामान्य परंपरा) को टोकन के रूप में चुना गया था, और एम्बेडेड पाठ के अंत को चिह्नित करता है। ध्यान दें कि टोकन अकेला दिखना चाहिए और लाइन पर पीछे की जगह नहीं होनी चाहिए।
तो यहाँ दस्तावेज़ का उपयोग करने का क्या फायदा है? यह अधिकतर वैसा ही है गूंज, सिवाय इसके कि, डिफ़ॉल्ट रूप से, यहां दस्तावेजों के भीतर सिंगल और डबल कोट्स शेल के लिए अपना विशेष अर्थ खो देते हैं। यहाँ एक कमांड लाइन उदाहरण है:
[मुझे@लिनक्सबॉक्स ~]$ foo='कुछ पाठ'
[मुझे@लिनक्सबॉक्स ~]$ बिल्ली << _EOF_
> $फू
[मुझे@लिनक्सबॉक्स ~]$ foo='कुछ पाठ'
[मुझे@लिनक्सबॉक्स ~]$ बिल्ली << _EOF_
> $फू
> "$फू"
> '$फू'
> \$फू
> _ईओएफ_ कुछ पाठ "कुछ पाठ" 'कुछ पाठ'
$फू
> "$फू"
> '$फू'
> \$फू
> _ईओएफ_ कुछ पाठ "कुछ पाठ" 'कुछ पाठ'
$फू
जैसा कि हम देख सकते हैं, शेल उद्धरण चिह्नों पर कोई ध्यान नहीं देता है। यह उन्हें सामान्य पात्रों के रूप में मानता है। यह हमें यहां दस्तावेज़ में उद्धरणों को स्वतंत्र रूप से एम्बेड करने की अनुमति देता है। यह हमारे रिपोर्ट कार्यक्रम के लिए उपयोगी साबित हो सकता है।
यहां दस्तावेज़ों का उपयोग किसी भी कमांड के साथ किया जा सकता है जो मानक इनपुट स्वीकार करता है। इस उदाहरण में, हम आदेशों की एक श्रृंखला को पारित करने के लिए यहां एक दस्तावेज़ का उपयोग करते हैं FTP दूरस्थ एफ़टीपी सर्वर से फ़ाइल पुनर्प्राप्त करने के लिए प्रोग्राम:
#! / Bin / bash
# FTP के माध्यम से फ़ाइल पुनर्प्राप्त करने के लिए स्क्रिप्ट FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ $FTP_SERVER खोलें
उपयोगकर्ता अनाम me@linuxbox सीडी $FTP_PATH
हैश
$REMOTE_FILE अलविदा प्राप्त करें
_ईओएफ_
ls -l $REMOTE_FILE
#! / Bin / bash
# FTP के माध्यम से फ़ाइल पुनर्प्राप्त करने के लिए स्क्रिप्ट FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ $FTP_SERVER खोलें
उपयोगकर्ता अनाम me@linuxbox सीडी $FTP_PATH
हैश
$REMOTE_FILE अलविदा प्राप्त करें
_ईओएफ_
ls -l $REMOTE_FILE
यदि हम पुनर्निर्देशन ऑपरेटर को "<<" से "<<-" में बदलते हैं, तो शेल यहां दस्तावेज़ में प्रमुख टैब वर्णों को अनदेखा कर देगा। इससे यहां दस्तावेज़ को इंडेंट किया जा सकता है, जिससे पठनीयता में सुधार हो सकता है:
#! / Bin / bash
# FTP के माध्यम से फ़ाइल पुनर्प्राप्त करने के लिए स्क्रिप्ट FTP_SERVER=ftp.nl.debian.org
#! / Bin / bash
# FTP के माध्यम से फ़ाइल पुनर्प्राप्त करने के लिए स्क्रिप्ट FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ $FTP_SERVER खोलें
उपयोगकर्ता अनाम me@linuxbox सीडी $FTP_PATH
हैश
$REMOTE_FILE अलविदा प्राप्त करें
_ईओएफ_
ls -l $REMOTE_FILE
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ $FTP_SERVER खोलें
उपयोगकर्ता अनाम me@linuxbox सीडी $FTP_PATH
हैश
$REMOTE_FILE अलविदा प्राप्त करें
_ईओएफ_
ls -l $REMOTE_FILE