کُد زیر را برای انتظار تا فشردن کلید اینتر توسط کاربر به کار ببرید:
# Bash read -p "Press [enter] to continue..." # Bourne echo "Press [enter] to continue..." read junk
یا استفاده از مورد زیر برای منتظر ماندن تا موقعی که کاربر برای ادامه یک ضربه کلید بزند:
# Bash read -rsn 1 -p "Press any key to continue..."
گاهی اوقات در حالیکه شما از قبل به علت اینکه (به عنوان مثال) در حال استفاده از لولهای برای تغذیه اسکریپت خود میباشید، در حال خواندن از ورودی استاندارد هستید، اما لازم است تا فشردن کلیدی توسط کاربر برای ادامه منتظر بمانید. چگونه به read میگویید که از صفحه کلید بخواند؟ در اینجا یونیکس به طور قابل انعطافی سودمند است، شما میتوانید "< /dev/tty" را اضافه کنید
# Bash read -rsn 1 -p "Press any key to continue..." < /dev/tty
اگر میخواهید مهلت معین برای انتظار قرار بدهید، از گزینه -t برای read استفاده نمایید:
# Bash printf 'WARNING: You are about to do something stupid.\n' printf 'Press a key within 5 seconds to cancel.' if ! read -rsn 1 -t 5 then something_stupid fi
اگر فقط میخواهید مدتی زمانی را بدون اعتنا به ورودی کاربر، متوقف گردد، sleep را به کار ببرید:
echo "The script is tired. Please wait a minute." sleep 60
اگر یک شمارش معکوس تفننی برای زمان دار نمودن read میخواهید:
# Bash # .این تابع عدد چند رقمی را نمیتواند مدیریت کند countdown() { local i printf %s "$1" sleep 1 for ((i=$1-1; i>=1; i--)); do printf '\b%d' "$i" sleep 1 done } printf 'Warning!!\n' printf 'Five seconds to cancel: ' countdown 5 & pid=$! if ! read -s -n 1 -t 5; then printf '\nboom\n' else kill "$pid"; printf '\nphew\n'fi
(اگر این کُد را در پوسته محاورهای به کار ببرید، در اثر سیستم کنترل job موقعی که پردازش فرزند تولید میشود و موقعی که کُشته میشود، شاهد اختلالی خواهید بود، اما در اسکریپت چنین اختلالی وجود نخواهد داشت.)
پرسش و پاسخ 65 (آخرین ویرایش 2013-04-08 12:28:58 توسط geirha)