فرمان sleep در ترمینال لینوکس موجب توقف موقتی اجرای دستورات میشود و به کمک آن میتوانید مکث به اندازهی دلخواه ایجاد کنید. به عبارت دیگر در بازهای که سیستم خواب یا Sleep است، امور قبلی اجرا میشود اما فرآیند جدیدی آغاز نمیشود.
در این مقاله با روش استفاده از دستور sleep در ترمینال Linux آشنا میشویم. با ما باشید.
نحوه استفاده از دستور sleep در ترمینال Linux
استفاده از دستور sleep در اپلیکیشن ترمینال بسیار ساده است: کافی است عددی بر حسب ثانیه را پس از این فرمان وارد کرده و Enter را فشار دهید:
با اجرای دستور فوق، سیستم ۵ ثانیه از اجرای دستورات Bash خودداری میکند و پس از ۵ ثانیه، مجدداً نشانگر تایپ چشمکزن و فعال میشود و میتوانید فرامین بعدی را اجرا کنید.
علاوه بر ثانیه، میتوانید تعداد روز و تعداد ساعت یا دقیقه را نیز به فرمان sleep بدهید. برای روز از حرف d و برای ساعت از حرف h و برای دقیقه از حرف m استفاده میشود. ثانیه نیز با حرف s مشخص میشود.
بنابراین دستور زیر برای توقف اجرای فرآیندها در ترمینال به مدت ۱ روز و ۴ ساعت و ۷ دقیقه و ۵ ثانیه کاربرد دارد:
البته حرف s پس از ثانیه الزامی نیست و میتوانید آن را تایپ نکنید. در واقع اگر عددی بدون حرف پس از آن وارد شود، sleep آن را به عنوان ثانیه در نظر میگیرد. لذا برای توقف اجرای دستورات Bash به مدت ۵ دقیقه و ۲۰ ثانیه، میتوانید فرمان زیر را اجرا کنید:
اگر در دستور فوق حرف m را وارد نکنید، ترمینال به مدت ۵ ثانیه و سپس به مدت ۲۰ ثانیه اسلیپ میشود!
دستور Sleep در ترمینال لینوکس، از نظر پارامترها بسیار انعطافپذیر است و ترتیب خاصی در وارد کردن پارامترها ضروری نیست. حتی میتوانید از عدد اعشاری استفاده کنید! به عنوان مثال برای نیم ساعت توقف اجرای دستورات، میتوانید از عدد 0.5h استفاده کنید. یا مثال دیگر 0.16667m است که یکششم دقیقه یا ۱۰ ثانیه را بیان میکند.
چهار دستور زیر همگی موجب توقف ترمینال برای مدت زمان ۱۰ ثانیه میشود:
استفاده از اسلیپ برای مکث قبل از اجرای دستور
یکی از کاربردهای مهم فرمان sleep، توقف فرآیند قبل از اجرای یک دستور خاص است. به عنوان مثال با اجرای دستور زیر، ترمینال ۱۵ ثانیه مکث میکند و سپس فرمان بعدی که echo است را اجرا میکند:
استفاده از sleep برای مکث بین دو دستور
اگر بخواهید بین دو فرمان در یک اسکریپت خاص، فاصلهی زمانی بیاندازید هم میتوانید از sleep استفاده کنید.
در نمونهی زیر بین فرمان ls که فایل و فولدرها را لیست میکند و دستور بعدی که cd است و فولدر کاری را تغییر میدهد، از sleep استفاده شده تا ۵ ثانیه توقف اتفاق بیافتد:
ls -R ~/Documents && sleep 5 && cd ~
و نتیجه به این صورت است:
استفاده از Sleep برای مکث در اجرای یک اسکریپت
استفاده از فرمان sleep در اسکریپتهای Shell به منظور مکث در اجرای دستورات، بسیار مفید است چرا که زمان کافی برای تکمیل فرآیند امور را فراهم میکند.
استفاده از sleep برای کاهش استفاده از منابع سختافزاری مثل CPU و RAM نیز مفید است چرا که میتوانید بین پردازشهای تکراری روی فایلهای مختلف، فاصلهی زمانی بیاندازید تا سیستم فرصتی برای اجرای دیگر فرآیندها داشته باشد.
برای توضیح کاربرد sleep در اسکریپتنویسی، به مثالی ساده توجه کنید:
یک اسکریپت ساده را در نظر بگیرید که سرویس تحت وب گوگل را به کمک curl فراخوانی میکند. زمانی که سرویس تحت وب را با شمارهی ISBN یک کتاب فراخوانی میکنید، پاسخی که دریافت میشود، اطلاعاتی در مورد کتاب به صورت JSON است. میتوان این دادهها را با استفاده از ابزار jq پردازش کرد و عنوان کتاب را دریافت کرد.
اگر تعداد کتابها زیاد باشد و در واقع فایلی حاوی تعداد زیادی ISBN داشته باشید، میبایست بین اجراها فاصله بیاندازید و این کاری است که فرمان sleep انجام میدهد.
لذا ابتدا فایلی متنی ایجاد کرده و دستورات زیر را در آن پیست کنید و آن را با عنوان check_book.sh ذخیره کنید:
#!/bin/bash for book in `cat $1` do echo $book":" curl -s https://www.googleapis.com/books/v1/volumes?q=isbn:$book | jq '.items | .[] | .volumeInfo.title' echo "" sleep 1 done echo "All done."
و با اجرای دستور زیر، دسترسیهای لازم برای اجرای اسکریپت را تنظیم کرده و اسکریپ را قابل اجرا کنید:
chmod +x check_book.sh
همانطور که اشاره کردیم سرویس گوگل به کمک curl فراخوانی میشود و نتیجه نیز با jq پردازش میشود. لذا میبایست curl و jq را دانلود و نصب کنید. برای این منظور بسته به توزیعی که استفاده میکنید، از دستورات دانلود و نصب استفاده کنید. در لینوکس Ubuntu یا توزیعات متنوع لینوکس که مبتنی بر Debian هستند، دو فرمان زیر را اجرا کنید:
sudo apt-get install curl sudo apt-get install jq
در ادامه یک فایل متنی ساده به اسم books.txt بسازید و شمارهی ISBN کتابها را در خطوط مجزا تایپ کنید، مثل مورد زیر:
9781565921276 9781874416685 9781565921672 9780521431088 9781491941591
حال اسکریپت check_book.sh را اجرا کنید و فایل books.txt را به عنوان یک پارامتر ورودی به آن بدهید:
./check_book.sh books.txt
نتیجه را در تصویر زیر مشاهده میکنید:
بین هر درخواست و درخواست بعدی، ۱ ثانیه مکث اتفاق میافتد و پس از هر مکث، شمارهی ISBN و عنوان کتاب نمایش داده میشود.
howtogeekسیارهی آیتی