ذكري المظهر

باش heredoc

Rah Insaki - Mohamad Bash / رح انساكي - محمد باش

Rah Insaki - Mohamad Bash / رح انساكي - محمد باش

جدول المحتويات:

Anonim

عند كتابة البرامج النصية shell ، قد تكون في موقف تحتاج فيه إلى تمرير كتلة متعددة الأسطر من النص أو التعليمات البرمجية إلى أمر تفاعلي ، مثل tee أو cat أو sftp .

في Bash والأصداف الأخرى مثل Zsh ، يعد المستند Here (Heredoc) نوعًا من إعادة التوجيه التي تتيح لك تمرير سطور متعددة من المدخلات إلى أمر ما.

بناء جملة الكتابة HereDoc يأخذ النموذج التالي:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • يبدأ السطر الأول بأمر اختياري يتبعه عامل إعادة التوجيه الخاص << ومعرف التحديد.
    • يمكنك استخدام أي سلسلة كمعرف لتعيين الحدود ، وأكثرها استخدامًا هو EOF أو END. إذا لم يكن معرّف الترسيم محددًا ، ستستبدل shell جميع المتغيرات والأوامر والأحرف الخاصة قبل تمرير سطور المستند هنا إلى الأمر. ناقص علامة إلى عامل إعادة التوجيه <<- ، سوف يتسبب في تجاهل جميع أحرف علامة التبويب الرائدة. هذا يسمح لك باستخدام المسافة البادئة عند كتابة المستندات هنا في البرامج النصية shell. لا يُسمح باستخدام رموز المسافات البادئة ، علامة التبويب فقط.
    يمكن أن تحتوي كتلة المستند هنا على سلاسل ومتغيرات وأوامر وأي نوع آخر من المدخلات. وينتهي السطر الأخير بمعرف التحديد. غير مسموح بالمساحة البيضاء أمام المحدد.

أمثلة Heredoc الأساسية

في هذا القسم ، سوف نلقي نظرة على بعض الأمثلة الأساسية لكيفية استخدام heredoc.

غالبًا ما يستخدم Heredoc بالاقتران مع أمر القط.

في المثال التالي ، نحن نمرر سطرين من النص يحتويان على متغير بيئة وأمر لاستخدام أداة هنا.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

كما ترون من الإخراج أدناه ، يتم استبدال كل من المتغير وإخراج الأمر:

The current working directory is: /home/linuxize You are logged in as: linuxize

دعونا نرى ما سيحدث إذا أرفقنا الفاصل في علامات اقتباس مفردة أو مزدوجة.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

يمكنك ملاحظة أنه عندما يتم تحديد المحدد لا يتم توسيع المعلمة ويتم استبدال الأمر بواسطة shell.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

بدلاً من عرض الإخراج على الشاشة ، يمكنك إعادة توجيهه إلى ملف باستخدام عوامل التشغيل > ، >> .

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

إذا كان file.txt غير موجود ، فسيتم إنشاؤه. عند استخدام > سيتم الكتابة فوق الملف ، بينما يقوم >> بإلحاق الإخراج بالملف.

ويمكن أيضا أن تكون مدخلات heredoc الأنابيب. في المثال التالي ، يستبدل الأمر sed جميع مثيلات الحرف l بالحرف e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

لكتابة بيانات الأنابيب إلى ملف:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

باستخدام Heredoc مع SSH

يعد استخدام Heredoc أحد أكثر الطرق ملاءمة وأسهل لتنفيذ أوامر متعددة على نظام بعيد عبر SSH.

عند استخدام محدد غير مدرج ، تأكد من هروبك من جميع المتغيرات والأوامر والأحرف الخاصة وإلا فسيتم إقحامها محليًا:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

قد ترغب أيضًا في إعداد مصادقة تستند إلى مفتاح SSH والاتصال بخوادم Linux دون إدخال كلمة مرور.

استنتاج

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

محطة باش