النقاط الرئيسية
- Echo هو أمر حيوي يسمح لنا بالحصول على إخراج مرئي من نصوص shell ويمكن أن يتضمن متغيرات وأسماء ملفات وأدلة.
- هناك نسختان من echo: واحدة مدمجة في غلاف Bash ونسخة قابلة للتنفيذ الثنائي.
- يمكن استخدام Echo لكتابة نص في نافذة المحطة الطرفية، واستخدام المتغيرات للحصول على إخراج ديناميكي، ودمج إخراج الأوامر، وتنسيق النص باستخدام أحرف عكسية مائلة، وقائمة الملفات والدلائل، والكتابة إلى الملفات.
ال echo
يعد الأمر مثاليًا لكتابة نص منسق في نافذة المحطة الطرفية. ولا يلزم أن يكون نصًا ثابتًا. يمكن أن يتضمن متغيرات shell وأسماء الملفات والدلائل. يمكنك أيضًا إعادة توجيه echo لإنشاء ملفات نصية وملفات سجل. اتبع هذا الدليل البسيط لمعرفة كيفية القيام بذلك.
ماذا يفعل إيكو؟
صدى يكرر ما لقد قيل أن يتكررإنها وظيفة بسيطة، ولكنها حيوية. بدون echo
، لن نتمكن من الحصول على إخراج مرئي من نصوص shell، على سبيل المثال.
على الرغم من عدم تحميلها بالعديد من الأجراس والصفارات، إلا أن هناك فرصة جيدة لذلك echo
لديه بعض القدرات التي لم تكن تعرف عنها أو نسيتها.
هناك نسختان من صدى الصوت
توفر معظم أنظمة Linux نسختين من echo
. ال شل باش لديه خاصته echo
مُضمن فيه، وهناك إصدار قابل للتنفيذ ثنائيًا منه echo
أيضًا.
يمكننا رؤية الإصدارين المختلفين باستخدام الأوامر التالية:
type echo
whereis echo
ال type
الأمر يخبرنا هل الأمر الذي نمرره إليه كما هو الحال دعوى هو غلاف مدمج، أو ملف تنفيذي ثنائي، أو اسم مستعار، أو وظيفة. يخبرنا أنه echo
هو غلاف مدمج.
بمجرد العثور على إجابة، type
يتوقف الأمر عن البحث عن المزيد من المطابقات. لذا فهو لا يخبرنا ما إذا كانت هناك أوامر أخرى بنفس الاسم موجودة في النظام. لكنه يخبرنا بأي أمر يجده أولاً. وهذا هو الأمر الذي سيتم استخدامه افتراضيًا عند إصدار هذا الأمر.
ال whereis
يبحث الأمر عن الملف الثنائي القابل للتنفيذ، وكود المصدر، وصفحة الدليل للأمر الذي نمرره إليه باعتباره سطر أوامر. المعلمةلا يبحث عن ملفات shell المضمنة لأنها لا تحتوي على ملف ثنائي قابل للتنفيذ منفصل. إنها جزء لا يتجزأ من ملف Bash القابل للتنفيذ.
ال whereis
تقارير القيادة تفيد بأن echo
هو ملف تنفيذي ثنائي يقع في /bin
دليل.
لاستخدام هذا الإصدار من echo
سوف تحتاج إلى استدعائه صراحةً من خلال توفير المسار إلى الملف القابل للتنفيذ على سطر الأوامر:
/bin/echo --version
لا يعرف shell المدمج ما هو --version
الحجة الموجودة في سطر الأوامر هي مجرد تكرارها في نافذة المحطة الطرفية:
echo --version
تستخدم جميع الأمثلة المعروضة هنا الإصدار الافتراضي من echo
، في غلاف Bash.
كتابة نص إلى المحطة الطرفية باستخدام الصدى
لكتابة سلسلة نصية بسيطة في نافذة المحطة الطرفية، اكتب echo
والسلسلة التي تريد عرضها:
echo My name is Dave.
يتكرر النص بالنسبة لنا. ولكن مع التجربة، ستكتشف قريبًا أن الأمور قد تصبح أكثر تعقيدًا بعض الشيء. انظر إلى هذا المثال:
echo My name is Dave and I'm a geek.
تعرض نافذة المحطة الطرفية >
يوقع ويجلس هناك منتظرًا. سيعيدك الضغط على Ctrl+C إلى موجه الأوامر. ماذا حدث هناك؟
الاقتباس المفرد أو علامة الاقتباس العليا في كلمة “أنا” مرتبك echo
لقد فسر هذا الاقتباس المفرد على أنه بداية لقسم مقتبس من النص. ولأنه لم يكتشف علامة اقتباس مفردة في النهاية، echo
كان ينتظر المزيد من المدخلات. وكان يتوقع أن تتضمن المدخلات الإضافية علامة الاقتباس المفردة المفقودة التي كان ينتظرها.
لتضمين علامة اقتباس واحدة في سلسلة، فإن الحل الأبسط هو وضع السلسلة بأكملها بين علامتي اقتباس مزدوجتين:
echo "My name is Dave and I'm a geek."
إن وضع علامتي اقتباس مزدوجتين في النص يعد نصيحة عامة جيدة. ففي البرامج النصية، يتم تحديد المعلمات التي تمررها بوضوح echo
وهذا يجعل قراءة البرامج النصية وتصحيح أخطائها أسهل بكثير.
ماذا لو أردت تضمين علامة اقتباس مزدوجة في سلسلة النص؟ الأمر سهل، فقط ضع شرطة مائلة عكسية \
أمام علامة الاقتباس المزدوجة (بدون مسافة بينهما).
echo "My name is Dave and I'm a \"geek.\""
هذا يضع كلمة “geek” بين علامتي اقتباس مزدوجتين بالنسبة لنا. سنرى المزيد من هذه الأحرف التي تم تجاوزها بعلامة الشرطة العكسية قريبًا.
استخدام المتغيرات مع echo
حتى الآن، كنا نكتب نصًا محددًا مسبقًا في نافذة المحطة الطرفية. يمكننا استخدام المتغيرات مع echo
لإنتاج مخرجات أكثر ديناميكية وتحتوي على قيم تم إدخالها إلينا بواسطة shell. يمكننا تعريف متغير بسيط باستخدام هذا الأمر:
my_name="Dave"
متغير يسمى my_name
تم إنشاء المتغير. وتم تعيين قيمة النص “Dave”. يمكننا استخدام اسم المتغير في السلاسل التي نمررها إلى echo
، وسيتم كتابة قيمة المتغير في نافذة المحطة الطرفية. يجب عليك وضع علامة الدولار $
أمام اسم المتغير للسماح echo
أعلم أنه متغير.
هناك تحذير. إذا قمت بتغليف السلسلة بين علامتي اقتباس مفردتين echo
سيتم التعامل مع كل شيء حرفيًا. لعرض قيمة المتغير، وليس اسم المتغير، استخدم علامتي اقتباس مزدوجتين.
echo 'My name is $my_name'
echo "My name is $my_name"
من المناسب إلى حد ما أن نكرر ذلك:
- يؤدي استخدام علامات الاقتباس المفردة إلى كتابة النص في نافذة المحطة الطرفية بطريقة حرفية.
- يؤدي استخدام علامات الاقتباس المزدوجة إلى تفسير المتغير – والذي يُسمى أيضًا توسيع المتغير – وكتابة القيمة في نافذة المحطة الطرفية.
استخدام الأوامر مع echo
يمكننا استخدام الأمر مع echo
ودمج مخرجاته في السلسلة المكتوبة في نافذة المحطة الطرفية. يجب علينا استخدام علامة الدولار $
كما لو كان الأمر متغيرًا، ووضع الأمر بأكمله بين قوسين.
نحن سوف نستخدم أمر التاريخإحدى النصائح هي استخدام الأمر بمفرده قبل البدء في استخدامه مع echo
بهذه الطريقة، إذا كان هناك خطأ ما في بناء جملة الأمر الخاص بك، يمكنك تحديده وتصحيحه قبل تضمينه في echo
الأمر. ثم، إذا كان echo
إذا لم يفعل الأمر ما تتوقعه، فستعرف أن المشكلة يجب أن تكون في echo
لأنك قمت بالفعل بإثبات بناء جملة الأمر.
لذا، حاول القيام بما يلي في نافذة المحطة الطرفية:
date +%D
وبعد التأكد من حصولنا على ما نتوقعه من أمر التاريخ، سنقوم بدمجه في echo
يأمر:
echo "Today's date is: $(date +%D)"
لاحظ أن الأمر موجود داخل الأقواس وعلامة الدولار $
يقع مباشرة قبل القوس الأول.
تنسيق النص باستخدام الصدى
ال -e
يتيح لنا خيار (تمكين الإفلات من الشرطة المائلة العكسية) استخدام بعض الأحرف التي تم إفلاتها من الشرطة المائلة العكسية لتغيير تخطيط النص. وهذه هي الأحرف التي تم إفلاتها من الشرطة المائلة العكسية والتي يمكننا استخدامها:
- \أ:تنبيه (يُعرف تاريخيًا باسم BEL). يؤدي هذا إلى إنشاء صوت التنبيه الافتراضي.
- \ب:يكتب حرف المسافة الخلفية.
- _ج:يتخلى عن أي إخراج آخر.
- \هـ:يكتب حرف الهروب.
- _ف:يكتب حرف تغذية النموذج.
- _ن:يكتب سطرًا جديدًا.
- _ر:يكتب إرجاع العربة.
- _ت:يكتب علامة تبويب أفقية.
- \v:يكتب علامة تبويب عمودية.
- \\:يكتب حرف الشرطة المائلة العكسية.
دعونا نستخدم بعضًا منها ونرى ماذا تفعل.
echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"
يتم تقسيم النص إلى سطر جديد حيث استخدمنا \n
الأحرف ويتم إدراج علامة التبويب حيث استخدمنا \t
الشخصيات.
echo -e "Here\vare\vvertical\vtabs"
مثل \n
أحرف سطر جديدة، علامة تبويب عمودية \v
ينقل النص إلى السطر أدناه. ولكن على عكس \n
أحرف سطر جديدة، \v
لا تبدأ علامة التبويب العمودية السطر الجديد عند العمود صفر. بل تستخدم العمود الحالي.
ال \b
تعمل أحرف المسافة الخلفية على تحريك المؤشر للخلف حرفًا واحدًا. إذا كان هناك المزيد من النص المراد كتابته إلى المحطة الطرفية، فسوف يحل هذا النص محل الحرف السابق.
echo -e "123\b4"
تم استبدال “3” بالرقم “4”.
ال \r
أسباب حرف العودة إلى السطر الأول echo
للرجوع إلى بداية السطر الحالي وكتابة أي نص إضافي من العمود صفر.
echo -e "123\r456"
تم استبدال “123” حرفًا بـ “456” حرفًا.
ال \a
سوف يصدر الحرف التنبيهي صوتًا “تنبيهيًا” مسموعًا. ويستخدم صوت التنبيه الافتراضي لموضوعك الحالي.
echo -e "Make a bleep\a"
ال -n
لا يعد خيار (لا سطر جديد) تسلسلًا مائلًا للخلف، ولكنه يؤثر على جماليات تخطيط النص، لذا سنناقشه هنا. فهو يمنع echo
من إضافة سطر جديد إلى نهاية النص. يظهر موجه الأوامر مباشرة بعد النص المكتوب في نافذة المحطة الطرفية.
echo -n "no final newline"
استخدام echo مع الملفات والدلائل
يمكنك استخدام echo
كنوع من نسخة الرجل الفقير من ls
. خياراتك قليلة ومتباعدة عندما تستخدم echo
مثل هذا. إذا كنت بحاجة إلى أي نوع من الدقة أو التحكم الدقيق، فمن الأفضل استخدام ls
و مجموعة من الخيارات.
يقوم هذا الأمر بإدراج جميع الملفات والدلائل الموجودة في الدليل الحالي:
echo *
يقوم هذا الأمر بإدراج جميع الملفات والدلائل الموجودة في الدليل الحالي والتي يبدأ اسمها بحرف “D”:
echo D*
يُدرج هذا الأمر كافة ملفات “.desktop” الموجودة في الدليل الحالي:
echo *.desktop
نعم، هذا ليس لعبًا echo
نقاط القوة. استخدم ls
.
الكتابة إلى الملفات باستخدام الصدى
يمكننا إعادة توجيه الإخراج من echo
وإنشاء ملفات نصية أو الكتابة في ملفات نصية موجودة.
إذا استخدمنا >
عامل إعادة التوجيه، يتم إنشاء الملف إذا لم يكن موجودًا. إذا كان الملف موجودًا، فسيتم إخراجه من echo
يتم إضافته في بداية الملف، مما يؤدي إلى استبدال أي محتوى سابق.
إذا استخدمنا >>
عامل إعادة التوجيه، يتم إنشاء الملف إذا لم يكن موجودًا. الناتج من echo
يتم إضافته إلى نهاية الملف ولا يحل محل أي محتوى موجود في الملف.
echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt
يتم إنشاء ملف جديد بالأمر الأول، ويتم إدراج نص فيه. يضيف الأمر الثاني سطرًا من النص إلى أسفل الملف. cat
يعرض الأمر محتويات الملف على نافذة المحطة الطرفية.
وبالطبع، يمكننا تضمين متغيرات لإضافة بعض المعلومات المفيدة إلى ملفنا. إذا كان الملف عبارة عن ملف سجل، فقد نرغب في إضافة طابع زمني إليه. يمكننا القيام بذلك باستخدام الأمر التالي.
لاحظ علامات الاقتباس المفردة حول المعلمات الخاصة بـ date
الأمر. فهي تمنع تفسير المسافة بين المعلمات على أنها نهاية قائمة المعلمات. وهي تضمن تمرير المعلمات إلى date
بشكل صحيح.
echo "Logfile started: $(date +'%D %T')" > logfile.txt
cat logfile.txt
تم إنشاء ملف السجل الخاص بنا لنا cat
يُظهر لنا أنه تم إضافة طابع التاريخ وطابع الوقت إليه.
هذا هو ذخيرة صدى
أمر بسيط، لكنه لا غنى عنه. إذا لم يكن موجودًا، لكان علينا اختراعه.