هنا المستندات
لقد نظرنا إلى طريقتين مختلفتين لإخراج النص ، كلاهما باستخدام صدى COM-
ماند. هناك طريقة ثالثة تسمى أ هنا الوثيقة or هنا النصي. المستند الموجود هنا هو شكل إضافي لإعادة توجيه الإدخال / الإخراج حيث نقوم بتضمين نص في البرنامج النصي الخاص بنا وإدخاله في الإدخال القياسي للأمر. يعمل مثل هذا:
أمر << رمز
نص
رمز
أين أمر هو اسم الأمر الذي يقبل الإدخال القياسي و رمز هي سلسلة تستخدم للإشارة إلى نهاية النص المضمن. سنقوم بتعديل البرنامج النصي الخاص بنا لاستخدام مستند هنا:
#! / بن / باش
# برنامج لإخراج صفحة معلومات النظام
TITLE = "تقرير معلومات النظام لـ $ HOSTNAME" CURRENT_TIME = $ (التاريخ + "٪ x٪ r٪ Z")
TIMESTAMP = "تم توليده $ CURRENT_TIME ، بواسطة $ USER"
قطة << _EOF_
العنوان $
العنوان $
TIMESTAMP دولار
_EOF_
#! / بن / باش
# برنامج لإخراج صفحة معلومات النظام
TITLE = "تقرير معلومات النظام لـ $ HOSTNAME" CURRENT_TIME = $ (التاريخ + "٪ x٪ r٪ Z")
TIMESTAMP = "تم توليده $ CURRENT_TIME ، بواسطة $ USER"
قطة << _EOF_
العنوان $
العنوان $
TIMESTAMP دولار
_EOF_
بدلا من استخدام صدى، يستخدم البرنامج النصي الخاص بنا الآن قط ووثيقة هنا. السلسلة _EOF_ (بمعنى "نهاية الملف" ، اصطلاح شائع) تم تحديده كعلامة مميزة ، ويضع علامة على نهاية النص المضمن. لاحظ أن الرمز المميز يجب أن يظهر بمفرده وأنه يجب ألا تكون هناك مسافات لاحقة على السطر.
إذن ما فائدة استخدام مستند هنا؟ انها في الغالب نفس صدى، إلا أنه ، بشكل افتراضي ، تفقد علامات الاقتباس المفردة والمزدوجة في المستندات هنا معناها الخاص في الغلاف. فيما يلي مثال على سطر الأوامر:
[me @ linuxbox ~] $ foo = "بعض النص"
[me @ linuxbox ~] $ قطة << _EOF_
> $ فو
[me @ linuxbox ~] $ foo = "بعض النص"
[me @ linuxbox ~] $ قطة << _EOF_
> $ فو
> "$ foo"
> "$ foo"
> \ $ فو
> _EOF_ بعض النص "بعض النص" "بعض النص"
$ فو
> "$ foo"
> "$ foo"
> \ $ فو
> _EOF_ بعض النص "بعض النص" "بعض النص"
$ فو
كما نرى ، فإن الغلاف لا يهتم بعلامات الاقتباس. يعاملهم كشخصيات عادية. هذا يسمح لنا بتضمين الاقتباسات بحرية داخل وثيقة هنا. قد يكون هذا مفيدًا لبرنامج تقريرنا.
يمكن استخدام المستندات هنا مع أي أمر يقبل الإدخال القياسي. في هذا المثال ، نستخدم وثيقة هنا لتمرير سلسلة من الأوامر إلى بروتوكول نقل الملفات برنامج موجود أو لاسترداد ملف من خادم FTP بعيد:
#! / بن / باش
# برنامج نصي لاسترداد ملف عبر 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
user anonymous me @ linuxbox cd $ FTP_PATH
مزيج
احصل على $ REMOTE_FILE وداعًا
_EOF_
ls -l $ REMOTE_FILE
#! / بن / باش
# برنامج نصي لاسترداد ملف عبر 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
user anonymous me @ linuxbox cd $ FTP_PATH
مزيج
احصل على $ REMOTE_FILE وداعًا
_EOF_
ls -l $ REMOTE_FILE
إذا قمنا بتغيير عامل إعادة التوجيه من "<<" إلى "<< -" ، فإن الصدفة ستتجاهل أحرف الجدولة البادئة في مستند هنا. يتيح ذلك وضع مسافة بادئة لمستند هنا ، مما قد يؤدي إلى تحسين إمكانية القراءة:
#! / بن / باش
# برنامج نصي لاسترداد ملف عبر FTP FTP_SERVER = ftp.nl.debian.org
#! / بن / باش
# برنامج نصي لاسترداد ملف عبر 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
user anonymous me @ linuxbox cd $ FTP_PATH
مزيج
احصل على $ REMOTE_FILE وداعًا
_EOF_
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
user anonymous me @ linuxbox cd $ FTP_PATH
مزيج
احصل على $ REMOTE_FILE وداعًا
_EOF_
ls -l $ REMOTE_FILE