النقاط الرئيسية
- يمكن لأمر “yes” في Linux وmacOS إنشاء أي رسالة تختارها بشكل متكرر، مثل سلاسل “نعم” أو “لا”.
- يمكن توجيه الناتج من الأمر “نعم” إلى برامج أو نصوص برمجية أخرى لتوفير استجابات تلقائية.
- يمكن أيضًا استخدام الأمر “نعم” لإنشاء ملفات كبيرة بسرعة عن طريق إعادة توجيه إخراجها إلى ملف.
يبدو أن الأمر yes بسيط للغاية بحيث لا يمكن أن يكون له أي استخدام عملي، ولكن في هذا البرنامج التعليمي، سنوضح لك تطبيقه وكيفية الاستفادة من إيجابيته المكبوتة في Linux وmacOS.
ماذا يفعل الأمر “نعم”؟
عند استخدام الأمر yes بدون أي معلمات لسطر الأوامر، فإنه يتصرف كما لو كنت تكتب “y” وتضغط على Enter، مرارًا وتكرارًا (ومرة تلو الأخرى). بسرعة كبيرة. وسيستمر في القيام بذلك حتى تضغط على Ctrl+C لمقاطعته.
yes
في الواقع، يمكن استخدام الأمر yes لتوليد أي رسالة تختارها بشكل متكرر. ما عليك سوى كتابة yes ومسافة والسلسلة التي ترغب في استخدامها، ثم الضغط على Enter. غالبًا ما يُستخدم هذا الأمر لجعل الأمر yes يولد دفق إخراج من سلاسل “نعم” أو “لا”.
yes yes
yes anything you like
ولكن ما الفائدة من ذلك؟
يمكن توجيه الناتج من yes إلى برامج أو نصوص أخرى.
هل يبدو هذا مألوفًا؟ تبدأ عملية طويلة ثم تبتعد عنها، تاركًا إياها لتستمر في العمل. وعندما تعود إلى جهاز الكمبيوتر الخاص بك، تجد أن العملية لم تكتمل على الإطلاق. وفي غيابك، يكون الجهاز قد طرح عليك سؤالاً ويجلس منتظرًا إجابة بـ “نعم” أو “لا”.
إذا كنت تعلم مسبقًا أن جميع إجاباتك ستكون إيجابية (“نعم” أو “y”) أو سلبية (“لا” أو “n”)، فيمكنك استخدام “نعم” لتقديم هذه الإجابات لك. بعد ذلك، ستستمر العملية الطويلة الخاصة بك حتى اكتمالها دون مراقبة، حيث توفر “نعم” إجابات لأي أسئلة تطرحها العملية.
استخدام yes مع البرامج النصية
انظر إلى نص Bash shell التالي. (علينا أن نتخيل أن هذا جزء من نص أكبر بكثير سيستغرق وقتًا طويلاً لتشغيله.)
#!/bin/bashecho "Are you happy to proceed? (y,n)"
read input
if ( "$input" == "" ); then
echo "Nothing was entered by the user"
elif (( "$input" == "y" )) || (( "$input" == "yes" )); then
echo "Positive response: $input"
else
echo "negative response: $input"
fi
يطرح هذا البرنامج النصي سؤالاً وينتظر إجابة. يتم تحديد التدفق المنطقي داخل البرنامج النصي بناءً على المدخلات من المستخدم.
- يشير “نعم” أو “ي” إلى استجابة إيجابية.
- وأي مدخلات أخرى تعتبر بمثابة استجابة سلبية.
- إن الضغط على Enter بدون إدخال نص لا يؤدي إلى أي شيء.
لاختبار ذلك، انسخ البرنامج النصي إلى ملف واحفظه باسم “long_script.sh”. استخدم chmod لجعله قابلاً للتنفيذ.
chmod +x long_script.sh
قم بتشغيل البرنامج النصي باستخدام الأمر التالي. حاول إدخال “yes” و”y” وأي شيء آخر كمدخلات، بما في ذلك الضغط على Enter بدون إدخال نص.
./long_script.sh
للحصول على نعم لتقديم استجابتنا لسؤال البرنامج النصي، قم بإرسال الناتج من نعم إلى البرنامج النصي.
yes | ./long_script.sh
بعض البرامج النصية أكثر صرامة في متطلباتها ولا تقبل إلا الكلمة الكاملة “نعم” كإجابة إيجابية. يمكنك تقديم “نعم” كمعلمة لـ “نعم”، على النحو التالي:
yes yes | ./long_script.sh
لا تقل نعم دون التفكير مليًا
يجب أن تتأكد من أن المدخلات التي ستقدمها إلى النص أو البرنامج ستمنحك النتيجة التي تتوقعها بالتأكيد. لكي تتمكن من اتخاذ هذا القرار، يجب أن تعرف الأسئلة وما ينبغي أن تكون ردودك عليها.
قد لا يتوافق المنطق في النص أو الأمر أو البرنامج مع توقعاتك. في نص المثال الخاص بنا، ربما كان السؤال “هل ترغب في التوقف؟ (y,n).” إذا كان الأمر كذلك، فإن الإجابة السلبية كانت ستسمح للنص بالاستمرار.
يجب أن تكون على دراية بالنص أو الأمر أو البرنامج قبل أن تقوم بالتوصيل بسهولة yes
فيه.
استخدام الأمر yes مع الأوامر
في طفولته، yes
سيتم استخدامه مع أوامر Linux الأخرى. منذ ذلك الحين، أصبحت معظم أوامر Linux الأخرى هذه لها طريقتها الخاصة في التشغيل دون تدخل بشري. yes
لم يعد هناك حاجة لتحقيق ذلك.
دعونا نأخذ مدير حزم أوبونتو apt-get
على سبيل المثال، لتثبيت تطبيق دون الحاجة إلى الضغط على “y” في منتصف عملية التثبيت، yes
كان من الممكن استخدامها على النحو التالي:
yes | sudo apt-get install fortune-mod
يمكن تحقيق نفس النتيجة باستخدام -y
(افترض نعم) الخيار في apt-get
:
sudo apt-get -y install fortune-mod
سوف ترى ذلك apt-get
لم يسأل حتى سؤاله المعتاد “هل تريد الاستمرار؟ (Y/n)”. لقد افترض فقط أن الإجابة ستكون “نعم”.
في توزيعات Linux الأخرى، يكون الوضع مماثلاً. في Fedora، كنت تستخدم هذا النوع من أوامر إدارة الحزم في وقت ما:
yes | yum install fortune-mod
ال dnf
تم استبدال مدير الحزمة yum
و dnf
لديه خاصته -y
(افترض نعم) الخيار.
dnf -y install fortune-mod
وينطبق نفس الشيء على cp
, fsck
، و rm
. كل هذه الأوامر لها أوامرها الخاصة -f
(القوة) أو -y
(افترض نعم) الخيارات.
فهل يبدو الأمر كذلك؟ yes
هل تم تقليص العمل إلى العمل بالنصوص فقط؟ ليس تمامًا. لا يزال هناك بعض الحيل الأخرى في النسخة القديمة.
بعض الحيل الإضافية
يمكنك استخدام yes
مع تسلسل الأرقام التي تم إنشاؤها بواسطة seq
للتحكم في حلقة من الإجراءات المتكررة.
يردد هذا السطر الواحد الأرقام المولدة إلى نافذة المحطة الطرفية ثم يستدعي sleep
لثانية واحدة.
بدلاً من مجرد تكرار الأرقام في نافذة المحطة الطرفية، يمكنك استدعاء أمر أو نص برمجي آخر. ولا يحتاج هذا الأمر أو النص البرمجي حتى إلى استخدام الأرقام، وهي موجودة فقط لبدء كل دورة من دورات الحلقة.
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done
في بعض الأحيان يكون من المفيد أن يكون لديك ملف كبير للاختبار به. ربما تريد التدرب على استخدام أمر zip، أو تريد أن يكون لديك ملف كبير الحجم لاختبار عمليات التحميل عبر FTP به.
يمكنك إنشاء ملفات كبيرة بسرعة باستخدام yes
كل ما عليك فعله هو إعطاؤه سلسلة طويلة من النصوص للعمل عليها وإعادة توجيه الناتج إلى ملف. لا تخطئ؛ ستنمو هذه الملفات بسرعة. كن مستعدًا للضغط على Ctrl+C في غضون ثوانٍ قليلة.
yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt
استغرق الملف الذي تم إنشاؤه هنا حوالي خمس ثوانٍ على جهاز الاختبار المستخدم لبحث هذه المقالة. ls
يذكر أن حجمه 557 ميجا بايت، و wc
أخبرنا أنه يوجد 12.4 مليون سطر فيه.
يمكننا تحديد حجم الملف عن طريق تضمين head
في سلسلة الأوامر الخاصة بنا. نخبرها بعدد الأسطر التي يجب تضمينها في الملف. -50
وسائل head
سوف يسمح فقط بمرور 50 خطًا إلى test.txt
ملف.
yes long line of meaningless text for file padding | head -50 > test.txt
بمجرد وجود 50 خطًا في test.txt
الملف، ستتوقف العملية. لا تحتاج إلى استخدام Ctrl+C. ستتوقف العملية تلقائيًا.
wc
يذكر أن الملف يحتوي على 50 سطرًا بالضبط، أي 400 كلمة، ويبلغ حجمه 2350 بايت.
يعد الأمر yes أحد أبسط الأوامر في Linux وأنظمة التشغيل الأخرى المشابهة لـ Unix مثل macOS. الكود المصدر للإصدار الأصلي – الذي تم إصداره في نظام التشغيل 7 Unix وتأليفه كين تومسون-يبلغ مجرد ستة أسطر من الكودعلى الرغم من أنه لا يزال مفيدًا في تغذية الاستجابات في البرامج النصية طويلة المدى (وبعض الحيل الأخرى)، yes
لن يكون الأمر جزءًا من مجموعة أدواتك اليومية من الأوامر. ولكن عندما تحتاج إليه، ستجد أنه بسيط للغاية – وكل ذلك في ستة أسطر من التعليمات البرمجية الذهبية.