أمر Bash Sleep: كيفية جعل سكربت Shell ينتظر لعدد محدد من الثواني

دقائق القراءة: 3

ما هو أمر sleep في Bash؟

عند كتابة سكربت باستخدام Shell أو Bash، قد تحتاج أحياناً إلى إيقاف التنفيذ مؤقتاً قبل الانتقال إلى الخطوة التالية. يحدث ذلك كثيراً عند انتظار اكتمال عملية معينة، أو قبل إعادة محاولة تنفيذ أمر فشل في المرة الأولى، أو عند تنظيم تسلسل الأوامر داخل السكربت بشكل أدق.

لهذه المهمة، يوفّر Bash أمراً بسيطاً وعملياً للغاية وهو sleep، والذي يسمح لك بجعل السكربت ينتظر مدة زمنية محددة قبل متابعة التنفيذ.

توضيح برمجي لاستخدام أمر sleep في Bash لإضافة تأخير زمني داخل سكربت Shell

كيفية استخدام أمر sleep في Bash

يمتاز أمر sleep بسهولة الصياغة ومرونته في الاستخدام. الصيغة الأساسية له هي:

sleep N

حيث تمثل N عدد الثواني التي سيتوقف خلالها السكربت مؤقتاً. ويمكن أن تكون هذه القيمة:

  • عدداً صحيحاً موجباً مثل 2 أو 10.
  • عدداً عشرياً مثل 0.8 لتمثيل أجزاء من الثانية.

مثال عملي على تأخير التنفيذ لثانيتين

يوضح المثال التالي كيف يمكن طباعة رسالة، ثم الانتظار لمدة ثانيتين، ثم طباعة رسالة أخرى:

echo "Hello there!"
sleep 2
echo "Oops! I fell asleep for a couple seconds!"

في هذا السيناريو، سينفّذ السكربت السطر الأول مباشرة، ثم يتوقف لمدة ثانيتين، وبعدها يكمل تنفيذ السطر الأخير.

مثال مرئي يوضح تأخير تنفيذ الأوامر باستخدام sleep في Bash

استخدام أجزاء من الثانية

لا يقتصر أمر sleep على الثواني الكاملة فقط، بل يمكن استخدام القيم العشرية أيضاً. على سبيل المثال:

sleep 0.8

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

الوحدات الزمنية المدعومة في أمر sleep

بشكل افتراضي، يعتمد أمر sleep على الثواني كوحدة زمنية أساسية، ولهذا لا تحتاج إلى كتابة الوحدة صراحة في الأمثلة البسيطة.

لكن في كثير من أنظمة Unix-like، يمكن استخدام وحدات زمنية إضافية لتحديد مدة الانتظار بشكل أوضح. من أشهر هذه الوحدات:

  • s : ثوانٍ
  • m : دقائق
  • h : ساعات
  • d : أيام

أمثلة على استخدام الوحدات الزمنية

sleep 10s
sleep 5m
sleep 1h
sleep 2d

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

تشغيل أمر sleep بأكثر من قيمة زمنية

في بعض الأنظمة، يمكن تمرير أكثر من قيمة إلى أمر sleep. عندها سيحسب النظام المدة الإجمالية بوصفها مجموع هذه القيم.

على سبيل المثال:

sleep 2m 30s

هذا يعني أن السكربت سيتوقف لمدة دقيقتين و30 ثانية، أي ما يعادل دقيقتين ونصف.

ملاحظة مهمة حول التوافق مع MacOS وBSD

في بعض البيئات مثل BSD وMacOS، قد يكون الدعم مقتصراً على الثواني فقط. لذلك، بدلاً من كتابة:

sleep 2m 30s

قد تحتاج إلى تحويل المدة إلى ثوانٍ وكتابة:

sleep 150

لأن دقيقتين و30 ثانية تساوي 150 ثانية.

متى يكون أمر sleep مفيداً داخل سكربتات Shell؟

رغم بساطة هذا الأمر، فإنه يدخل في عدد كبير من الاستخدامات العملية داخل سكربتات Bash. من أبرز هذه الحالات:

  • الانتظار حتى تكتمل عملية في الخلفية.
  • إضافة مهلة قبل إعادة محاولة الاتصال بخدمة أو موقع.
  • تنظيم ترتيب تنفيذ الأوامر داخل السكربت.
  • بناء تنبيهات أو مهام زمنية بسيطة.
  • تقليل الضغط على الخوادم عند تكرار الطلبات في حلقات loops.

أفضل الممارسات عند استخدام sleep

لتحقيق استفادة أكبر من أمر sleep، من الجيد مراعاة بعض النقاط العملية:

  • استخدم التأخير فقط عند الحاجة الفعلية، حتى لا تجعل السكربت أبطأ من اللازم.
  • اختر مدة الانتظار بناءً على طبيعة العملية، لا بشكل عشوائي.
  • تحقق من توافق صياغة الوقت مع نظام التشغيل المستخدم، خصوصاً عند العمل بين Linux وMacOS.
  • إذا كنت تعيد تنفيذ أمر بعد الفشل، ففكر في دمج sleep مع منطق إعادة المحاولة retry logic.

الخلاصة التقنية

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

اترك تعليقاً

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