پرسش و پاسخ شماره ۳۴ - آموزش اسکریپت نویسی
X
تبلیغات
رایتل

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

#!/bin/bash

پرسش و پاسخ شماره ۳۴

پرسش و پاسخ شماره ۳۴

آیا می‌توانم در Bash یک چرخنده اجرا کنم؟

مطمئناً!

i=1
sp="/-\|"
echo -n ' '
while true
do
    printf "\b${sp:i++%${#sp}:1}"
done

در هر نوبت که حلقه تکرار می‌شود، کاراکتر بعدی در رشته sp را نمایش می‌دهد، هنگامیکه به انتها می‌رسد از سر گرفته می‌شود. (i موقعیت کاراکتر جاری برای نمایش است و ‎ ${#sp}طول رشته sp است).

رشته ‎ \b‎ با یک کاراکتر 'backspace' تعویض می‌شود. به طور جایگزین، می‌توانستید با‎ \r ‎ به ابتدای سطر برگردید.

اگر می‌خواهید آهسته شود، از فرمان sleep در داخل حلقه(بعد از printf) استفاده کنید.

اگر از قبل حلقه‌ای دارید که کارهای زیادی انجام می‌دهد، می‌توانید تابع زیر را برای به روزرسانی چرخنده در ابتدای هر تکرار آن فراخوانی کنید:

sp="/-\|"
sc=0
spin() {
   printf "\b${sp:sc++:1}"
   ((sc==${#sp})) && sc=0
}
endspin() {
   printf "\r%s\n" "$@"
}

until work_done; do
   spin
   some_work ...
done
endspin

تکنیک مشابهی برای ساختن نوار پیشرفت می‌تواند به کار برود.


CategoryShell

پرسش و پاسخ 34 (آخرین ویرایش ‎ 2009-12-30 18:39:39 &38206 توسط MatthiasPopp)