الرئيسيةأنظمة التشغيلlinuxكيفية استخدام “المستندات هنا” في Bash على Linux
linux

كيفية استخدام “المستندات هنا” في Bash على Linux

تسمح لك “المستندات هنا” الغريبة باستخدام إعادة توجيه الإدخال / الإخراج داخل نصوص Bash على نظام Linux. إنها طريقة رائعة لأتمتة الأوامر التي تحتاجها للتشغيل على كمبيوتر بعيد.

هنا المستندات

العديد من الأوامر في Linux لها اسمان أو ثلاثة أحرف. هذا ما أدى جزئيًا إلى نشوء فكرة أن Linux يصعب تعلمه ومليء بالأوامر الغامضة. لكن أحد أغرب الأسماء في Linux ليس من الأسماء المختصرة بشكل غامض. “الوثائق هنا” ليست وثائق ، وليس من الواضح ما الذي تشير إليه كلمة “هنا”.

إنها بنية داكنة نسبيًا ، لكنها مفيدة. بالطبع ، هذا نظام Linux ، لذلك هناك أكثر من طريقة لجلد قطة. يمكن إعادة إنتاج بعض الوظائف التي توفرها هذه الوثائق بطرق أخرى. غالبًا ما تكون هذه الطرق البديلة أكثر تعقيدًا. في البرمجة والبرمجة النصية ، تعني كلمة “أكثر تعقيدًا” أيضًا “أكثر عرضة للخطأ” وأن الحفاظ على شفرتك أكثر صعوبة.

حيث تتفوق المستندات هنا في أتمتة الأوامر التي تريد إرسالها إلى كمبيوتر بعيد من اتصال قائم من داخل برنامج نصي. إجراء الاتصال أمر سهل ، ولكن بمجرد إجراء الاتصال ، كيف يمكنك “ضخ” أوامرك من البرنامج النصي إلى الغلاف الموجود على الكمبيوتر البعيد؟ هنا المستندات تسمح لك بالقيام بذلك بكل بساطة.

أساسيات المستند هنا

يبدو التمثيل الاصطلاحي للمستند هنا كما يلي:

COMMAND << cadena_límite
 .
 .
texto 
datos
variables
.
.
cadena_límite
  • COMMAND : يمكن أن يكون أي أمر Linux يقبل المدخلات المعاد توجيهها. لاحظ أن echoالأمر لا يقبل الإدخال المعاد توجيهه . إذا كنت بحاجة للكتابة على الشاشة ، يمكنك استخدام catالأمر الذي يفعل .
  • << : عامل إعادة التوجيه.
  • Limit_string : هذه تسمية. يمكن أن يكون كل ما تريد طالما أنه لا يظهر في قائمة البيانات التي تعيد توجيهها إلى الأمر. يتم استخدامه لتمييز نهاية قائمة النص والبيانات والمتغيرات.
  • قائمة البيانات : قائمة البيانات التي سيتم إرسالها إلى الأمر. يمكن أن تحتوي على أوامر ونصوص ومتغيرات. يتم إدخال محتويات قائمة البيانات في سطر الأوامر سطر واحد في كل مرة حتى يتم العثور على _limit_string.

سترى على الأرجح أمثلة من المستندات هنا التي تستخدم “EOF” كسلسلة حدية. نحن لا نفضل هذا النهج. إنه يعمل ، لكن “EOF” تعني “نهاية الملف”. بصرف النظر عن الحالة النادرة التي يكون فيها مستند البداية هو آخر شيء في ملف نصي ، يتم إساءة استخدام “EOF”.

اقرأ أيضاً :  كيفية إزالة LibreOffice Ubuntu من جهازك؟ - طريقة فعالة

ستجعل البرامج النصية الخاصة بك أكثر قابلية للقراءة إذا كنت تستخدم سلسلة حدية تشير إلى ما تفعله. إذا كنت ترسل سلسلة من الأوامر إلى كمبيوتر بعيد عبر Secure Shell (SSH) ، فإن سلسلة حدية تسمى شيئًا مثل “_remote_commands” سيكون لها معنى كبير. ليس عليك أن تبدأهم بشرطة سفلية ” _“. نفعل ذلك لأنه يميزهم كشيء خارج عن المألوف في نصه.

أمثلة بسيطة

يمكنك استخدام المستندات هنا في سطر الأوامر وفي البرامج النصية. عندما تكتب ما يلي في نافذة طرفية ، سترى رسالة >متابعة سطر » » في كل مرة تضغط فيها على «دخول». عندما تكتب سلسلة الحدود “_end_of_text” وتضغط على “Enter” ، يتم تمرير قائمة مواقع الويب cat,وعرضها في نافذة المحطة الطرفية.

gato << _end_of_text 
How-To Geek 
Revisión Geek 
LifeSavvy 
CloudSavvy IT
MindBounce
_end_of_text

هذا ليس التمرين الأكثر قيمة ، لكنه يُظهر أنه لا يتم إرسال أي شيء إلى الأمر حتى يتم جمع قائمة البيانات بالكامل والعثور على السلسلة المحيطة. و catيتلقى قيادة أي إدخال حتى تقوم بإدخال سلسلة الحدود “_end_of_text” واضغط على مفتاح “Enter”.

يمكننا أن نفعل الشيء نفسه في النص. اكتب هذا المثال أو انسخه في محرر ، واحفظ الملف باسم “heredoc-1.sh” وأغلق المحرر.

#! / bin / bash

gato << "_end_of_text"
Su nombre de usuario es: $ (whoami)
Su directorio de trabajo actual es: $ PWD
Tu versión de Bash es: $ BASH_VERSION
_end_of_text

مع استمرار هذه المقالة ، في كل مرة تقوم فيها بإنشاء برنامج نصي ، ستحتاج إلى جعله قابلاً للتنفيذ قبل تشغيله. في كل حالة ، استخدم chmodالأمر . استبدل اسم البرنامج النصي في كل مثال باسم البرنامج النصي المستخدم هنا.

chmod + x heredoc-1.sh

يحتوي هذا البرنامج النصي على متغيرين للبيئة $PWDو $BASH_VERSION. يتم استبدال أسماء متغيرات البيئة بقيم بياناتها (دليل العمل الحالي وإصدار Bash) عند تشغيل البرنامج النصي.

يستخدم البرنامج النصي أيضا  استبدال القيادة  في هذا whoamiالأمر . يتم استبدال اسم الأمر بمخرجاته الخاصة. تتم كتابة مخرجات النص بأكمله في النافذة الطرفية باستخدام الأمر cat. نقوم بتشغيل البرنامج النصي من خلال تسميته بالاسم:

./heredoc-1.sh

إذا قمت بتعديل البرنامج النصي وقمت بلف سلسلة الحدود في السطر الأول من المستند هنا بين علامتي اقتباس » "« ، يتم تمرير قائمة البيانات إلى الأمر هنا المستند حرفياً. يتم عرض أسماء المتغيرات بدلاً من القيم المتغيرة ، ولن يتم تنفيذ استبدال الأوامر.

#! / bin / bash

cat << - "_end_of_text"
Su nombre de usuario es: $ (whoami)
Su directorio de trabajo actual es: $ PWD
Tu versión de Bash es: $ BASH_VERSION
_end_of_text

معالجة أحرف الجدولة

بشكل افتراضي ، سيتم الاحتفاظ بأحرف الجدولة في قائمة البيانات الخاصة بك وكتابتها في نافذة المحطة الطرفية. انسخ هذا المثال واحفظه باسم “heredoc-2.sh”. اجعله قابلاً للتنفيذ باستخدام chmodالأمر. قم بتحرير الأسطر ذات المسافة البادئة للتأكد من أنها تحتوي على حرف جدولة واحد أو اثنين في بداية السطر بدلاً من سلسلة من المسافات.

#! / bin / bash

gato << _end_of_text
Su nombre de usuario es: $ (whoami)
  Su directorio de trabajo actual es: $ PWD
    Tu versión de Bash es: $ BASH_VERSION
_end_of_text
./heredoc-2.sh

علامات التبويب مكتوبة في نافذة المحطة.

بإضافة شرطة » -» إلى عامل إعادة التوجيه ، سيتجاهل المستند هنا أحرف الجدولة البادئة. احفظ هذا المثال باسم “heredoc-3.sh” واجعله قابلاً للتنفيذ.

#! / bin / bash

gato << - _end_of_text
Su nombre de usuario es: $ (whoami)
  Su directorio de trabajo actual es: $ PWD
    Tu versión de Bash es: $ BASH_VERSION
_end_of_text
./heredoc-3.sh

يتم تجاهل علامات التبويب. قد يبدو هذا تافهاً ، لكنه طريقة جيدة للتعامل مع علامات التبويب الأولية بسبب الأقسام ذات المسافات البادئة من النصوص.

اقرأ أيضاً :  كيفية تثبيت البرامج والحزم في Linux من Terminal باستخدام الأوامر

غالبًا ما يتم وضع مسافة بادئة للحلقات والتركيبات المنطقية الأخرى. إذا كان المستند الخاص بك موجودًا هنا في قسم ذي مسافة بادئة من برنامج نصي ، فإن استخدام شرطة ” ” مع عامل إعادة التوجيه يزيل مشاكل التنسيق التي تسببها أحرف الجدولة البادئة -.

#! / bin / bash

si es verdad; luego
  cat << - _limit_string
  Línea 1 con tabulación inicial.
  Línea 2 con tabulación inicial.
  Línea 3 con una pestaña inicial.
  _limit_string
fi

يمكن إعادة توجيه إخراج الأمر المستخدم مع المستند هنا إلى ملف. استخدم عوامل إعادة التوجيه ” >” (أنشئ الملف) أو ” >>” (أنشئ الملف إذا لم يكن موجودًا ، وألحقه إذا كان موجودًا)  بعد  سلسلة الحدود في السطر الأول من المستند هنا.

هذا البرنامج النصي هو “heredoc-4.sh”. سيعيد توجيه مخرجاته إلى ملف نصي يسمى “session.txt”.

#! / bin / bash

cat << _end_of_text> session.txt
Su nombre de usuario es: $ (whoami)
Su directorio de trabajo actual es: $ PWD
Tu versión de Bash es: $ BASH_VERSION
_end_of_text
./heredoc-4.sh
gato sesión de texto

قم بتوصيل الإخراج إلى أمر آخر

يمكن توجيه إخراج الأمر المستخدم في مستند هنا كمدخل لأمر آخر. استخدام في الأنابيب |المشغل » »  بعد  سلسلة الحدود في السطر الأول من الوثيقة هنا. سنقوم بتوجيه إخراج الأمر هنا المستند  cat، إلى  sed. نريد  استبدال كل تكرارات الحرف “a” بالحرف “e”.

اسم هذا البرنامج النصي “heredoc-5.sh”.

#! / bin / bash

gato << _end_of_text | sed 's / a / e / g'
Cómo
Para
Gaak
_end_of_text
./heredoc-5.sh

«جااك» يصحح نفسه إلى «المهوس».

إرسال المعلمات إلى وظيفة

يمكن أن يكون الأمر المستخدم مع المستند هنا وظيفة في البرنامج النصي.

يمرر هذا البرنامج النصي بعض البيانات من السيارة إلى الوظيفة. تقرأ الوظيفة البيانات كما لو تم إدخالها بواسطة مستخدم. ثم يتم طباعة القيم المتغيرة. احفظ هذا البرنامج النصي باسم “heredoc-6.sh”.

#! / bin / bash

# la función set_car_details ()
set_car_details ()
{
leer hacer
leer modelo
leer new_used
leer delivery_collect
leer ubicación
leer precio
}

# El documento aquí que pasa los datos a set_car_details ()
set_car_details << _mars_rover_data
NASA
Perseverance Rover
Usado
Recolectar
Marte (largo, lat) 77.451865,18.445161
2,2 mil millones
_mars_rover_data

# Recupera los detalles del vehículo
echo "Make: $ make"
echo "Modelo: $ modelo"
echo "Nuevo o Usado: $ new_used"
echo "Entrega o recogida: $ delivery_collect"
echo "Ubicación: $ ubicación"
echo "Precio \ $: $ precio"
./heredoc-6.sh

تفاصيل السيارة مكتوبة في نافذة المحطة.

اقرأ أيضاً :  كيفية تكوين الشبكات بسهولة على خادم UBUNTU باستخدام NETPLAN

إنشاء وإرسال بريد إلكتروني

يمكننا استخدام مستند هنا لإنشاء رسالة بريد إلكتروني وإرسالها. لاحظ أنه يمكننا تمرير المعلمات إلى الأمر أمام عامل إعادة التوجيه. نحن باستخدام لينكس mailقيادة ل إرسال البريد الإلكتروني من خلال نظام البريد المحلي  إلى حساب المستخدم يدعى “ديف”. و -sيسمح خيار (الموضوع) لنا لتحديد موضوع البريد الإلكتروني.

يشكل هذا المثال البرنامج النصي “heredoc-7.sh”.

#! / bin / bash

artículo = "Aquí Documentos"

mail -s 'Estado de carga de trabajo' dave << _project_report
Nombre de usuario: $ (whoami)
Ha completado la tarea:
Artículo: $ artículo
_informe del proyecto
./heredoc-7.sh

لا يوجد إخراج مرئي من هذا البرنامج النصي. ولكن عندما نتحقق من بريدنا ، نرى أن البريد الإلكتروني قد تم تكوينه وإرساله وتسليمه.

correo

استخدام المستندات هنا مع SSH

تعد المستندات هنا طريقة فعالة ومناسبة لتشغيل بعض الأوامر على كمبيوتر بعيد بمجرد إنشاء اتصال SSH. إذا قمت بتكوين مفاتيح SSH بين جهازي الكمبيوتر ، فستكون عملية تسجيل الدخول تلقائية تمامًا. في هذا المثال السريع والقذر ، ستتم مطالبتك بكلمة المرور لحساب المستخدم على الكمبيوتر البعيد.

هذا السيناريو هو “heredoc-8.sh”. سنقوم بالاتصال بجهاز كمبيوتر بعيد يسمى “كمبيوتر بعيد”. حساب المستخدم يسمى “ديف”. نحن نستخدم -Tالخيار (تعطيل تخصيص المحطة الزائفة) لأننا لسنا بحاجة إلى محطة تفاعلية زائفة لتخصيصها لنا.

في قسم “القيام ببعض الأعمال هنا” من البرنامج النصي ، يمكننا تمرير قائمة بالأوامر ، ويمكن تشغيلها على الكمبيوتر البعيد. بالطبع ، يمكنك فقط استدعاء برنامج نصي كان موجودًا على جهاز الكمبيوتر البعيد. يمكن أن يحتوي البرنامج النصي البعيد على جميع الأوامر والإجراءات التي تريد تشغيلها.

كل نصوصنا ، heredoc-8.sh ، سوف يقوم بتحديث سجل اتصال على الكمبيوتر البعيد. يتم تسجيل حساب المستخدم وطابع التاريخ والوقت في ملف نصي.

#! / bin / bash

ssh -T dave@remote-pc.local << _comandos_remoto

# trabaja un poco aquí

# actualizar el registro de conexión
echo $ USER "-" $ (fecha) >> /home/dave/conn_log/script.log
_remote_commands

عندما ننفذ الأمر ، يُطلب منا إدخال كلمة مرور الحساب على الكمبيوتر البعيد .

./heredoc-8.sh

يتم عرض بعض المعلومات حول الكمبيوتر البعيد ونعود إلى موجه الأوامر.

على الكمبيوتر البعيد ، يمكننا استخدامه catللتحقق من سجل الاتصال:

cat conn_log / script.log

يتم سرد كل اتصال بالنسبة لنا.

اسم غريب ، ميزات رائعة

المستندات هنا غريبة ولكنها قوية ، خاصة عند استخدامها لإرسال أوامر إلى كمبيوتر بعيد. سيكون من السهل جدًا كتابة روتين احتياطي باستخدام rsync. يمكن للبرنامج بعد ذلك الاتصال بجهاز الكمبيوتر البعيد ، والتحقق من مساحة التخزين المتبقية ، وإرسال رسالة تنبيه بالبريد الإلكتروني إذا كانت المساحة منخفضة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

error: عفوا محتوي هذا الموقع محمي بموجب قانون الألفية للملكية الرقمية !!