مطمئناً!
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
تکنیک مشابهی برای ساختن نوار پیشرفت میتواند به کار برود.
پرسش و پاسخ 34 (آخرین ویرایش 2009-12-30 18:39:39 &38206 توسط MatthiasPopp)